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