[PHP-users 34290] 同一セッションを個々のサーバで利用したい。
Alex
alex.backspin @ gmail.com
2009年 2月 17日 (火) 17:38:57 JST
(メールが送信エラーになっていたようなので再度送信します。
もし2通届いていたら、ご容赦ください。)
ALEXといいます。
個々のWEBサーバで同一のセッションを利用したく、下記のサイトを参考に
テストをしているのですが上手くいかないのでご教示ください。
http://itpro.nikkeibp.co.jp/article/COLUMN/20081118/319447/
環境:
ubuntu 8.0.4
php 5.2.4
MySQL 5.0.5
apache 2.2.8
php.ini にて session.use_cookies = 0 としてクッキーを使用しないように
した。
MySQLに DB名:session_db、テーブル名:session_table として上記リンクに
ある通り
のテーブルを作成。
そのテーブルにはセッション情報を保存できる(session_test1.php)ことは確
認しました。
しかし、その情報を読み出すことができません。(session_test2.phpの結果が
空白)
このような方法意外に sharedance というソフトを利用することもできるよう
ですが、
メリットとデメリットはありますでしょうか?
また、これ以外によい方法があればご教示をお願い致します。
■ session_test1.php
<?php
include_once("session_handler.php");
session_start();
$_SESSION["name"]="ALEX";
$_SESSION["id"]="12345678";
?>
<html>
<body>
<a href="session_test2.php">[Next]</a>
</body>
</html>
■ session_test2.php
<?php
include_once("session_handler.php");
session_start();
?>
<html>
<body>
<?php
echo $_SESSION["name"] . "<p>";
echo $_SESSION["id"] . "<p>";
?>
</body>
</html>
■ session_handler.php
<?php
function connect_db() {
$db_connect =
mysql_connect("localhost", "root", "")
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("session_db");
$result = mysql_query("SELECT *
FROM session_table
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("session_db");
$result = mysql_query("SELECT *
FROM session_table
WHERE session_id='{$id}'");
if(mysql_num_rows($result) == 1){
$result = mysql_query("UPDATE session_table
SET session_data='{$sess_data}'
WHERE session_id='{$id}'");
}else{
$date = date('Y-m-d H:i:s');
$result = mysql_query("INSERT INTO session_table
VALUES('{$id}' ,
'{$sess_data}' ,'{$date}')");
}
return true;
}
function destroy ($id) {
global $db;
mysql_select_db("session_db");
$result = mysql_query("DELETE from session_table
WHERE session_id='{$id}'");
return true;
}
function gc ($maxlife_time) {
return true;
}
session_set_save_handler
("open", "close", "read", "write", "destroy", "gc");
?>
PHP-users メーリングリストの案内