надежно имея дело с клиентом 'сессии' в PHP

Можно установить альтернативную функцию поколения хеша, если Вы хотите настроить способ, которым идентификатор сгенерирован (это - число на 128 битов, сгенерированное через MD5 по умолчанию). См. http://www.php.net/manual/en/session.configuration.php#ini.session.hash-function

Для получения дополнительной информации о сессиях PHP, попробуйте эту превосходную статью http://shiflett.org/articles/the-truth-about-sessions , который также связывается с другими статьями о фиксации сессии и налете.

5
задан Carson Myers 11 December 2009 в 23:13
поделиться

3 ответа

Похоже, вы уже освоили основы. Однако, если вы Делая все это вручную, вы фактически просто реализуете свой собственный $ _ SESSION и не пользуетесь тем фактом, что он уже может сделать все это за вас.

Если вы хотите использовать базу данных для обработки сеанса вы можете переопределить обработку сеанса по умолчанию своей собственной. Взгляните на session_set_save_handler () . Я делаю это в своих приложениях.

class SessionHandler
{

    public function open($save_path, $session_name)
    {
        $this->sessionName = $session_name;
    return(true);
    }
    public function close() {
        //stuff
    }

    public function read($id) {
        $expiretime = date("Y-m-d H:i:s",time() - $this->maxLifeTime);
        $sql = "SELECT * FROM sessions where sessionid='".$this->db->escapeData($id)."' AND lastupdated>='".$expiretime."' LIMIT 1";
    $result = $this->db->query($sql);
        //etc.
    }

    //etc.

    public function setAsSessionHandler()
    {
    session_set_save_handler(
        array($this,'open'),
        array($this,'close'),
        array($this,'read'),
        array($this,'write'),
        array($this,'destroy'),
        array($this,'gc')
    );
    }
}

$sessionHandler = new SessionHandler();
$sessionHandler->setAsSessionHandler();

У вас могут быть все функции, которые вы только что описали, которые вы реализовали сами, используя это, но при этом у вас есть возможность $ _SESSION сделать это за вас.

Например, если вы хотели добавить проверку IP, чтобы убедиться, что сеанс все еще действителен, прежде чем запускать его, вы можете добавить это как часть функции «открытия». Если вы хотите записать данные сеанса в десять разных баз данных (не то, что вы хотели бы), вы могли бы сделать это в write '.

Все эти функции используются в зависимости от того, как вы используете $ _SESSION, и, поместив их в простой класс, вы можете очень эффективно управлять тем, как он работает.

Вы увидите, что идентификатор сеанса параметр, передаваемый функциям чтения / записи / уничтожения, и вы по-прежнему будете управлять им таким же образом, используя процедуру генерации GUID. Однако вы можете закрепить генерацию guid и проверки в этом классе диспетчера сеансов и просто сделать их функцией open (). Централизованно, без суеты.

Я по-прежнему буду управлять этим таким же образом, используя процедуру создания GUID. Тем не менее, вы можете закрепить генерацию guid и проверки в этом классе диспетчера сеансов и просто сделать их функцией open (). Централизованно, без суеты.

Я все равно буду управлять этим таким же образом, используя процедуру генерации GUID. Тем не менее, вы можете закрепить генерацию guid и проверки в этом классе диспетчера сеансов и просто сделать их функцией open (). Централизованно, без суеты.

7
ответ дан 14 December 2019 в 01:09
поделиться

То, как вы это делаете сейчас, хорошо, если вам нужно каким-то образом связать текущего пользователя с другой информацией базы данных.

Использование сеансов - предпочтительный способ сделать это для простоты. Я предлагаю вам немного прочитать об этом на www.php.net/sessions и сделать вывод на этом основании. Его очень легко использовать, но он менее гибкий, чем использование таблицы базы данных. Вы по-прежнему можете установить все нужные значения, но тогда вам придется получать их и вставлять в запрос всякий раз, когда вам нужно использовать их для операций с базой данных.

1
ответ дан 14 December 2019 в 01:09
поделиться

Я думаю, вы на правильном пути. Это действительно будет зависеть от требований безопасности вашего приложения. Вы можете думать о $ _SESSION, очень похожем на $ _COOKIE: как о механизме, обеспечивающем состояние между обновлениями страниц. В этом контексте личность вашего пользователя. Ваша база данных должна обеспечивать дополнительные механизмы аутентификации. Вещи, которые могут однозначно идентифицировать вашего пользователя. Типичным предположением является IP-адрес, но что произойдет, если чей-то IP изменится? Другой вариант - это агент пользователя, но он не очень уникален.

Я бы посоветовал взглянуть на: http://php.net/manual/en/session.security.php

1
ответ дан 14 December 2019 в 01:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: