【问题标题】:PHP's Session StoragePHP的会话存储
【发布时间】:2009-10-06 20:22:23
【问题描述】:

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

PHP 将会话数据保存到数据库时我理解的方式是这样的:

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

$_SESSION['username'] = $username;


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

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

感谢您的宝贵时间。

【问题讨论】:

  • 不确定您是否偶然这样做,但在您的第一行,将 $username 括在引号中是不必要的。

标签: php session


【解决方案1】:

_SESSION 是一个“普通”数组,就像$a = array() 一样。
“魔术”仅在调用 session_start() 并将先前存储的数据读(回)到 _SESSION 以及会话机制停止时(当 php 实例关闭或调用 session_write_close() 时)发生并且 _SESSION 中的数据是序列化和存储。

【讨论】:

    【解决方案2】:

    完全正确。

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多