PHP会话存储

时间:2009-10-06 20:22:23

标签: php session

我在理解PHP的会话时遇到了一些麻烦。首先,我将会话数据保存在数据库中,我使用PHP的session_set_save_handler()函数来定义它。

我理解PHP将会话数据保存到数据库时的方式如下:

如果我定义了一些会话变量,然后将一些文本输出到用户的浏览器,我相信在输出文本之前,会话数据不会保存到DB。请看这段代码:

$_SESSION['username'] = $username;


//check if session variable set
if($_SESSION['username'] != $username)
{
die('error...');
}

在代码中,if语句返回false,因此die()永远不会发生。此外,PHP在if语句之后才会将会话数据写入DB。我不明白的是,如果会话数据尚未写入数据库,那么PHP如何将$_SESSION['username']$username进行比较?当会话数据写入数据库时​​,$_SESSION['username']是否存储在服务器内存中,直到脚本结束?

感谢您的时间。

3 个答案:

答案 0 :(得分:2)

完全正确。

会话数据保留在内存中直到请求结束(或直到调用session_write_close())。然后将$ _SESSION的内容写入配置的存储机制。

在下一个请求中,当session_start()发生时,数据将从存储器加载到$ _SESSION,并保留,直到请求完成。

否则,每次触及会话中的任何内容时,PHP都会读取/写入数据库(在您的情况下)。

答案 1 :(得分:2)

_SESSION是一个“普通”数组,就像$a = array()一样 只有当调用session_start()并且先前存储的数据被读取(返回)到_SESSION并且会话机制停止时(当php实例关闭或者调用session_write_close()时)和_SESSION中的数据是序列化和存储。

答案 2 :(得分:1)

您可以使用session_write_close强制php编写会话。

见: http://us2.php.net/manual/en/function.session-write-close.php