4

首先,我的具体问题。这应该工作吗?

<?php 
    session_start();
    $_SESSION['test']='TEST_CONTENT';

    echo '1: ',$_SESSION['test'];
    echo '<br>';

    session_write_close();

    echo '2: ',$_SESSION['test']
?>

现在,一些背景信息。我们有一个带有 Frameset 的 Web 应用程序(不要让我开始......不,没有钱来改变它)并且我们发现在某些情况下我们的 SESSION 变量没有被写入数据库!经过一些艰苦的测试,我们发现两个帧同时加载,虽然它几乎从未发生过,但第一个调用的帧在第二个之后完成。第一个调用的框架是用预先制作的副本覆盖会话(因为在脚本结束时它会写入会话)。

我们现在的解决方案是尽快在第一个调用的帧上调用 session_write_close(),但我们担心仍然能够读取会话变量(100% 确定)。

4

1 回答 1

1

好好想一想,你可以用其他方式实现。

如何实现它很简单

session_start();
$_SESSION['timestamp'] = time();

这将放在您的脚本中。

当脚本停止时,它将被保存到您的数据库中,但是等待停止,我们还没有完成:P

然后检查当前记录中的时间戳是更高还是更低。如果它低于更新,否则忘记更新并且什么也不做。应该考虑 microtime()。因为人们喜欢按 f5。

如此新的想法,我认为它的效果更好一些,并且可以节省生产成本


要回答评论:

查看会话处理程序,您可以创建自己的函数来处理 php 会话。所以你不必重构你的代码,只需添加。

然后在写入部分,您对数据库说使用 id x 更新记录,并且时间戳高于给定值。

对于实现,您应该在记录时间戳/mincrotime 中添加一列。在会话处理程序中,您可以节省请求的时间。所以你可以进行比较。那么你也不需要在会话中保存时间:)(不是在 $_SESSION 中,它保存在数据库中!)

于 2013-06-06T13:37:34.187 回答