Преобразование файловых сессий в сеансы на основе базы данных - PullRequest
2 голосов
/ 20 июня 2011

Я пытаюсь преобразовать обычные сеансы на основе файлов в более управляемые сеансы на основе базы данных, что дает мне большую гибкость в плане масштабирования и управления сеансами, в том числе удаленного их завершения.

Это текущий процесс входа в систему:

                if($db)//$u&&$p)
                    {                           

                        $sql = "SELECT * FROM tbl_user WHERE ";
                        switch(LOGIN_METHOD)
                            {
                                case 'both':
                                    $sql .= "(username='".$db->real_escape_string($u)."' OR useremail='".mysql_real_escape_string($u)."')";
                                    break;
                                case 'email':
                                    $sql .= "useremail='".$db->real_escape_string($u)."'";
                                    break;
                                default:
                                    $sql .= "username='".$db->real_escape_string($u)."'";
                                    break;
                            }
                        $sql .= " AND userpassword = '".md5($sysconfig['salt'].$p)."'";

                        $rs = @$db->query($sql);

                        if(!$rs) return false;

                        if($rs->num_rows)
                            {
                                $this->set_session(array_merge($rs->fetch_assoc(),array('expires'=>time()+(15*60))));
                                $return = true;
                            }
                        $rs->free_result();
                        $db->close();
                        unset($rs,$sql);
                    }

Интересующая меня строка, в которой он устанавливает сеанс:

$this->set_session(array_merge($rs->fetch_assoc(),array('expires'=>time()+(15*60))));

Где, set_session:

private function set_session($a=false)
    {
        if(!empty($a))
            {
                $_SESSION['exp_user'] = $a;
            }
    }

В таблице хранятся только имя пользователя, адрес электронной почты для входа, пароль для входа и идентификатор пользователя.

Как бы я мог преобразовать это в систему сеансов на основе базы данных, работающую на MySQL, конечно?

Стоит ли использовать таблицы типов MEMORY или HEAP?

1 Ответ

2 голосов
/ 20 июня 2011

Вы должны посмотреть на set_session_save_handler. Это позволяет вам указать, как обработчик сеанса может получать и сохранять свои данные. Довольно просто написать реализацию, которая использует базу данных.

При таком подходе вы можете продолжать использовать $_SESSION, как обычно.

MEMORY и HEAP - это одно и то же (в MySQL). Вы можете использовать таблицу MEMORY, поскольку сеансы могут быть нестабильными. Я не знаю много о характеристиках производительности для этой цели, хотя. Я предполагаю, что если ваша сессионная таблица достаточно мала, она все равно будет в основном в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...