セッションをDBに保持する方法

WEB開発を行っていると、時々、WEBサーバーが複数台構成で、ロードバランスしたりする場合などがあり、
セッション情報をDBに持つ場面があったりします。

この際、セッションをDBに持たせることにより解決しますが、その設定方法を記載します。

・前提
 Linux + PHP + MySQLでの開発

・方法
 1.php.iniのsession.save_handlerにuserを設定。(ini_set関数でも可)

 2.session_set_save_handler関数にてユーザー定義のセッション保存関数を設定。
   session_set_save_handler('open','close','read','write','destroy','clean');

via.http://jp.php.net/manual/ja/function.session-set-save-handler.php


 3.セッション保存用のテーブルを用意(※下記は必要に応じて変更してください。)

   CREATE TABLE sessions
   (
     id INTEGER NOT NULL AUTO_INCREMENT,
     session_id TEXT NOT NULL ,
     value TEXT,
     update DATETIME ,
     PRIMARY KEY (id) ,
     UNIQUE Index_1(session_id )
   ) 

 4.上記2で定義した下記の関数を設定します。
   open
   close
   read
   write
   destroy
   clean

  ex).セッション参照
function read($session_id)
{
$conn = mysql_connect('hostname_or_ip' , 'user', 'password');

   $session_id = mysql_real_escape_string($session_id);

   $query = "SELECT value FROM sessions WHERE session_id = '".$session_id."'";

$rows = mysql_query($query , $conn );

mysql_close($rows );

while ($row = mysql_fetch_array( $rows ))
{
$value = $row['data'];
}

return $value ;
}

コメント