[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 メーリングリストの案内