在session_write_close之后读取会话变量

时间:2013-06-06 12:46:23

标签: php session frameset

首先,我的具体问题。这有用吗?

<?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%确定)。

1 个答案:

答案 0 :(得分:1)

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

如何实现它很安静简单

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

这将在您的脚本中上面。

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

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

这么新的想法,我认为它的效果会更好,并且可以节省生产费用


回答评论:

看看session handler,你可以自己创建php处理会话的功能。因此,您不必重构代码,只需添加。

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

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