ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php – 在session_write_close之后读取会话变量

2019-07-09 04:40:43  阅读:162  来源: 互联网

标签: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%确定).

解决方法:

考虑一下你可以用另一种方式实现它.

如何实现它很安静简单

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

这将放在您的脚本中.

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

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

这么新的想法,我认为它对生产来说更好一点,更安全

回答评论:

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

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

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

标签:php,session,frameset
来源: https://codeday.me/bug/20190709/1409549.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有