session_set_save_handler()中write使用的有关问题
程序员文章站
2022-03-27 18:21:09
...
session_set_save_handler()中write使用的问题
我把SESSION写入数据库,sessionID用URL传。
a.php:
b.php
session.php:
现在是这样:
运行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 重写回去的
我把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 重写回去的
相关文章
相关视频
推荐阅读
-
Python中循环后使用list.append()数据被覆盖问题的解决
-
使用jQuery快速解决input中placeholder值在ie中无法支持的问题
-
平面设计中字库使用的问题解答
-
Winform中在使用VS+svn进行协同开发时添加引用时的相对路径和绝对路径的问题
-
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
-
Android 使用volley过程中遇到的问题解决办法
-
html5的input的required使用中遇到的问题及解决方法
-
使用vue-cli打包过程中的步骤以及问题的解决
-
web.py在SAE中的Session问题解决方法(使用mysql存储)
-
Mysql5.7中使用group concat函数数据被截断的问题完美解决方法