[PHP-users 35400] session_handler.phpの挙動について

yayacchiman chance0130 @ mg.point.ne.jp
2010年 11月 11日 (木) 02:28:40 JST


PHP 5.3でのセッション管理についての質問です。

MySQLでセッション管理を行おうと思い、session_handler.php
なるモジュールをDOWNLOADしてきて使ってみたのですが、

どうも、メモリによるSESSION管理と動作が異なるようです。

下記は使っているものです。

ini_set('session.save_handler', 'user');
define("SES_DB_HOST_NAME",'localhost');
define("SES_DB_USER_NAME",'root');
define("SES_DB_PASSWORD",'');
define("SES_DB_NAME",'');

function connect_db() {
$db_connect =
mysql_connect(SES_DB_HOST_NAME, SES_DB_USER_NAME, SES_DB_PASSWORD)
or die("Could not connect");
return $db_connect;
}


function open ($save_path, $session_name) {
global $db;

$db = connect_db();

return true;
}

function close() {

return true;

}

function read ($id) {

global $db;

mysql_select_db(SES_DB_NAME);

@mysql_query("SET NAMES sjis");
$result = mysql_query("SELECT *
FROM t_session
WHERE session_id='{$id}'");

if(mysql_num_rows($result) == 1){
$row = mysql_fetch_array($result);
return $row['session_data'];
} else {
return "";
}
}

function write ($id, $sess_data) {

global $db;

mysql_select_db(SES_DB_NAME);

@mysql_query("SET NAMES sjis");

$result = mysql_query("SELECT *
FROM t_session
WHERE session_id='{$id}'");

if(mysql_num_rows($result) == 1){

@mysql_query("SET NAMES sjis");
$result = mysql_query("UPDATE t_session
SET session_data='{$sess_data}'
WHERE sess
ion_id='{$id}'");
} else {
$date = date('Y-m-d H:i:s');

@mysql_query("SET NAMES sjis");
$result = mysql_query("INSERT INTO t_session
VALUES('{$id}' ,
'{$sess_data}' ,'{$date}')");
}

return true;
}

function destroy ($id) {

global $db;

mysql_select_db(SES_DB_NAME);

@mysql_query("SET NAMES sjis");
$result = mysql_query("DELETE from t_session
WHERE session_id='{$id}'");

return true;

}

function gc ($maxlife_time) {
return true;
}

session_set_save_handler
("open", "close", "read", "write", "destroy", "gc");

session_start();
↑これを、sshundler.phpとして全ページにinclude_onceしています。

何が違うかというと、ページ間のSESSION変数が途中でなくなってしまう
現象が起こっています。PHP.iniはセッションタイムアウト以外は特に触ってい
ません。

1.php.iniに何か設定すべきことはありますか?
2.1ページ目でPOST変数をSESSION変数に格納。
  2ページ目でこのSESSION変数を利用しようとすると、var_dumpすると消え
ています。

メモリにしたときは消えることはありません。セッションタイムアウトは30分
で設定しています。
PHP 4.xのときはこんなことはありませんでした。

SESSIONのスコープが変わったとか、private関数の中では使えないと
か・・・

だれか、おわかりになる方教えてください。











PHP-users メーリングリストの案内