[英]PHP's Session Storage
我在理解PHP的会话时遇到了一些麻烦。 首先,我将会话数据保存在数据库中,然后使用PHP的session_set_save_handler()
函数进行定义。
我了解PHP将会话数据保存到DB的方式是这样的:
如果我定义了一些会话变量,然后将一些文本输出到用户的浏览器,我相信会话数据要等到文本输出后才保存到DB。 请看下面这段代码:
$_SESSION['username'] = $username;
//check if session variable set
if($_SESSION['username'] != $username)
{
die('error...');
}
在代码中,if语句返回false,因此die()
永远不会发生。 同样,直到if语句之后,PHP才将会话数据写入数据库。 我不明白的是,如果会话数据尚未写入数据库,PHP如何将$_SESSION['username']
与$username
? 将会话数据写入数据库时, $_SESSION['username']
存储在服务器内存中,直到脚本结束为止?
感谢您的时间。
非常正确。
会话数据将一直保留在内存中,直到请求结束(或直到调用session_write_close()为止)为止。 然后,将$ _SESSION的内容写入配置的存储机制。
在下一个请求上,当session_start()发生时,数据将从存储加载到$ _SESSION,并停留在该位置,直到请求完成。
否则,每次您在会话中碰到任何东西时,PHP都会(在您的情况下)读取/写入数据库。
_SESSION是一个“普通”数组,就像$a = array()
。
只有在调用session_start()并将先前存储的数据读取(返回)到_SESSION以及会话机制停止(当php实例关闭或调用session_write_close()时)并且_SESSION中的数据序列化并存储。
您可以使用session_write_close强制php编写会话。
参见: http : //us2.php.net/manual/en/function.session-write-close.php
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.