投稿者 |
メッセージ |
|
< PHPプログラミング ~ MySQLに対するsession_set_save_handler |
|
時間:
火 12月 26, 2006 4:35 pm
|
|
|
登録日: 2006年11月 27日
投稿記事: 3
|
|
こんにちは。
MySQLに対するsession_set_save_handlerで詰まっています。
自分でWEBの参考ページなどを見ながら作成していたのですが、全く思うように動かないため、下記URLを参考に、まず、サンプルが動くのか試してみました。
http://shiflett.org/articles/guru-speak-jan2005
DBは上記URLにあるSQL文を使い、テーブル名のみsessions_tに変更して作成済みです。
Quote: |
<?php
function _open() {
//print "open ";
global $_sess_db;
if ($_sess_db = mysql_connect("abc","def","ghi")) {
return mysql_select_db('sessions_t', $_sess_db);
}
return FALSE;
}
function _close() {
//print "close ";
global $_sess_db;
return mysql_close($_sess_db); }
function _read($id) {
//print "read ";
global $_sess_db;
$id = mysql_real_escape_string($id);
$sql = "SELECT data FROM sessions_t WHERE id = '$id'";
if ($result = mysql_query($sql, $_sess_db)) {
if (mysql_num_rows($result)) {
$record = mysql_fetch_assoc($result);
return $record['data']; }
}
return '';
}
function _write($id, $data) {
//print "write ";
global $_sess_db;
$access = time();
$id = mysql_real_escape_string($id);
$access = mysql_real_escape_string($access);
$data = mysql_real_escape_string($data);
$sql = "REPLACE INTO sessions_t VALUES ('$id', '$access', '$data')";
return mysql_query($sql, $_sess_db);
}
function _destroy($id) {
//print "destroy ";
global $_sess_db;
$id = mysql_real_escape_string($id);
$sql = "DELETE FROM sessions_t WHERE id = '$id'";
return mysql_query($sql, $_sess_db);
}
function _clean($max) {
//print "clean ";
global $_sess_db;
$old = time() - $max;
$old = mysql_real_escape_string($old);
$sql = "DELETE FROM sessions_t WHERE access < '$old'";
return mysql_query($sql, $_sess_db);
}
session_set_save_handler('_open',
'_close',
'_read',
'_write',
'_destroy',
'_clean');
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<HTML xmlns="http://www.w3.org/1999/xhtml">
<HEAD>
<META http-equiv="Content-Language" content="ja">
<META http-equiv="Content-Type" content="text/html; charset=x-euc-jp">
<META http-equiv="Content-Style-Type" content="text/css">
<META http-equiv="Content-Script-Type" content="text/javascript">
<META name="keywords" content="">
<META name="description" content="">
<TITLE>test</TITLE>
<LINK href="style.css" rel="stylesheet" type="text/css" media="all">
<SCRIPT type="text/javascript" src="rollover.js"></SCRIPT> </HEAD>
<BODY bgcolor="#d1d1d1">
テスト
</BODY>
</HTML>
|
print文を生かして動かすと、「テスト」というHTML文字の表示の前に、openとreadには行っているのですが、HTML表示が終わったあと、writeに行っていません。
データベースを見ても、1件も吐かれていません。
PHPもMYSQLも初めてなので、なんだかトンでもない勘違いとか間違いをおかしているのかもしれません。
本当は、このソースで、画面表示前にopen+readが走って、画面表示後にwrite+closeが走らなければいけないのではないかと思うのですが、この認識自体が間違いでしょうか?。
また、疑問点として、上記のようなソースを、ユーザー認証が必要な画面に全てrequireした場合、画面の表示前にopenが走り、表示後にcloseが走るという挙動であれば、画面内部で、やはり同じDBを使って検索処理などを行っていた場合、二重openとかでおかしくならないのでしょうか?。(自分で実験してみなさい!という仰せは重々承知しておりますが、session_set_save_handler自体がうまく動かないため、実験以前の状態で・・・本当に申し訳ありません)
MYSQLでsession_set_save_handlerを使ったことがある方などいらっしゃったら、ヒントや糸口などご教授願えればと思います。
よろしくお願いいたします。 |
|
|
|
|
|
|
|
|
新規投稿: 不可 返信: 不可t 自分の記事の編集: 不可 自分の記事の削除: 不可 投票への参加: 不可
|
|