2010-06-01 2 views
7

Как использовать сессию в таблице базы данных с php и mysql?установить сеанс в базе данных в php

+1

Не могли бы вы дать нам немного больше информации? Что именно вы собираетесь делать с сеансами? – 2ndkauboy

+2

Сначала вы можете выполнить поиск в Google. Одна из первых ссылок, которые она вам предоставит, это, например: http://www.devshed.com/c/a/PHP/Storing-PHP-Sessions-in-a-Database/ – nico

+0

Обычно сеанс сохранен во временных файлах на сервере. Я хочу сохранить сеанс в таблице базы данных. – shin

ответ

18

Вы должны создать объект так:

class SessionHandler 
{ 
    private static $lifetime = 0; 

    private function __construct() //object constructor 
    { 
     session_set_save_handler(
      array($this,'open'), 
      array($this,'close'), 
      array($this,'read'), 
      array($this,'write'), 
      array($this,'destroy'), 
      array($this,'gc') 
     ); 
    } 

    public function start($session_name = null) 
    { 
     session_start($session_name); //Start it here 
    } 

    public static function open() 
    { 
     //Connect to mysql, if already connected, check the connection state here. 

     return true; 
    } 

    public static function read($id) 
    { 
     //Get data from DB with id = $id; 
    } 

    public static function write($id, $data) 
    { 
     //insert data to DB, take note of serialize 
    } 

    public static function destroy($id) 
    { 
     //MySql delete sessions where ID = $id 
    } 

    public static function gc() 
    { 
     return true; 
    } 
    public static function close() 
    { 
     return true; 
    } 
    public function __destruct() 
    { 
     session_write_close(); 
    } 
} 

Затем перед тем session_start инициировать этот класс!

include 'classes/sessionHandlerDB.php'; 

$session = new SessionHandler(); 

$session->start('userbase'); 

$_SESSION['name'] = 'Robert Pitt'; //This is sent to SessionHandler::write('my_id','Robert Pitt') 
echo $_SESSION['name']; //This calls SessionHandler::read($id)//$id is Unique Identifier for that 

http://php.net/manual/en/function.session-set-save-handler.php

http://php.net/manual/en/function.serialize.php

+0

Можете ли вы рассказать мне, как я могу использовать этот код для установки сеанса? Есть ли разница с обычной настройкой сеанса? – shin

+0

Басиально, что вы используете $ _SESSION ... Это запросит SessionHandler, что означает, что обработчик сеанса является средним человеком, он обрабатывает данные и возвращает данные. Если вы применяете свой собственный обработчик, вы можете сохранить его так или иначе, как вы хотите, Файл и т. Д. Выполнение этого говорит PHP. Когда вы используете сеанс для запроса этого класса для данных. поскольку вы включаете этот файл и создаете его экземпляр, все остальное, что вы делаете, не изменится, если метод хранения будет DB. Ive обновил мой пост, пожалуйста, просмотрите – RobertPitt

+0

Также этот код является чисто примером, я бы расширил его, чтобы иметь объект хранения, поэтому вы уменьшаете количество вызовов на db, также смотрите на MemCached! – RobertPitt

1

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

Смежные вопросы