session_set_save_handler()中write使用的問題
我把SESSION寫入資料庫,sessionID用URL傳。
a.php:
PHP code
b.php
PHP code
session.php:
PHP code
{$time}"; $result = mysql_query($sql, $link); if(@$row = mysql_fetch_row($result, $link)) { return $row[0]; }else { return ''; } } function write($sessionId, $sessionData) { global $link, $expiry; $sessionId = mysql_escape_string($sessionId); $sessionData = mysql_escape_string($sessionData); $time = time() + $expiry; $sql = "INSERT INTO session(session_id, value, expiry) VALUES('{$sessionId}', '{$sessionData}', {$time});"; $result = mysql_query($sql, $link); if($result) { return true; } $sql = "UPDATE session SET value='{$sessionData}', expiry={$time} WHERE session_id='{$sessionId}'"; $result = mysql_query($sql, $link); if($result && mysql_affected_rows($link)) { return true; }else { return false; } } function destroy($sessionId) { global $link; $sessionId = mysql_escape_string($sessionId); $sql = "DELETE FROM session WHERE session_id='{$sessionId}';"; $result = mysql_query($sql, $link); if($result) { return true; }else { return false; } } function gc($maxLifeTime) { return true; }
現在是這樣:
運行a.php,SESSION確實儲存到了資料庫中:
+----------------------------+--------------------------------+------------+
| session_id | value | expiry |
+----------------------------+--------------------------------+------------+
| o7olki3vmch3k8bakhk71emco6 | isLogin|i:1;permission|s:0:""; | 1344495859 |
+----------------------------+--------------------------------+------------+
問題是:
當點擊a.php的超連結去b.php時,傳過去的sessionID所代表的SESSION值被清空了。
+----------------------------+-------+------------+
| session_id | value | expiry |
+----------------------------+-------+------------+
| o7olki3vmch3k8bakhk71emco6 | | 1344496029 |
+----------------------------+-------+------------+
後來我發現,原來是運行b.php頁面時,執行了write()方法中的UPDATE:
UPDATE session SET value='', expiry=1344496029 WHERE session_id='o7olki3vmch3k8bakhk71emco6'
但是我在b.php頁面中並沒有更改SESSION的操作啊?這是怎麼回事呢?
麻煩大家了!!!
------解決方案--------------------
php 並不知道你是否修改了 session 變數的值
所以他總是要將 session 重寫回去的