2013-06-08 4 views
0

Я пытаюсь настроить систему входа/выхода пользователя с помощью php и mysql. Я нашел документацию по этому вопросу здесь: http://phpmaster.com/writing-custom-session-handlers/. Я пытаюсь следовать вместе с ним (я тоже вытягивался из других источников, но это главный).Настройка php session (session_set_save_handler)

Вот некоторые из моего кода от «my_session_handler.php»:

class MySessionHandler implements SessionHandlerInterface { 

    private $path = session_save_path(); 
    private $name = session_name(); 
    private $sessionId = session_id(); 

    function open($path, $name) { 
     $db = new PDO("mysql:host=localhost;dbname=itit", "root", "bonjour3"); 

     $sql = "INSERT INTO session SET session_id =" . $db->quote($sessionId) . ", session_data = '' ON DUPLICATE KEY UPDATE session_lastaccesstime = NOW()"; 
     $db->query($sql);  


    ... 

Мой вопрос, где находятся «$ путь» и «$ название» переменные, поступающие из в примере я цитировал выше? Я объявил их как частные переменные и использовал некоторые функции, чтобы делать то, что, как я думаю, нужно сделать. Но на веб-сайте, с которым я следую, - ни одна из этих переменных не объявлена ​​- вместе с $ sessionId. Я вижу, что функция чтения возвращает $ data. Поэтому я использовал его в функции «написать» следующим образом:

function write($sessionId, this.read($sessionId)) { 
    $db = new PDO("mysql:host=localhost;dbname=itit", "root", "bonjour3"); 

    $sql = "INSERT INTO session SET session_id =" . $db->quote($sessionId) . ", session_data =" . $db->quote($data) . " ON DUPLICATE KEY UPDATE session_data =" . $db->quote($data); 
    $db->query($sql) 
} 

Я делаю это правильно?

ответ

1

Эти параметры используются обработчиком сохранения сеанса по умолчанию, который сохраняет данные сеанса в файлах. Они исходят из файла php.ini и используются для формирования имен файлов. Они передаются вашему обработчику, когда PHP вызывает метод open().

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

+0

большое спасибо за объяснение! – ewizard

+0

barmar ... у меня есть еще один вопрос - мне нужно действительно использовать функции в MySessionHandler? Например ... мне нужно использовать функцию close(), когда я хочу закрыть сеанс? Или обработчик сеанса делает все это для меня? – ewizard

+0

Вы не используете эти функции напрямую, они используются обработчиком сеанса. Когда приложение вызывает 'session_close()', обработчик сеанса вызывает вашу функцию закрытия. – Barmar