繁体   English   中英

PHP的会话存储

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM