【问题标题】:Unset session after some time一段时间后取消设置会话
【发布时间】:2011-12-26 06:13:01
【问题描述】:

我正在建立一个在线订票网站。在此我正在做以下事情: 用户使用他们的座位号搜索公共汽车。数据库使用带有 temp_seat_book = 'Y' 的座位号进行更新。如果他预订了付钱的机票,他的状态将更新为final_ticket_book = 'Y'。现在我想删除 temp_seat_book = 'Y'final_ticket_book = 'N' 。为此,我需要删除超过 10 分钟的 session_ids 和 final_ticket_book = 'N'。那么如何实现后台作业呢?

【问题讨论】:

标签: php session background


【解决方案1】:

而不是搜索文件(涉及更多 i/o)等, 什么是会话 cookie:Session Cookie
更好的方法是将“最近活动”的时间戳存储在 $_SESSION 变量中。
并更新每个请求的会话数据(包括自动定期 ajax 调用,如果有的话)。

假设您想在 10 分钟后取消设置会话,

if (isset($_SESSION['most_recent_activity']) && 
    (time() -   $_SESSION['most_recent_activity'] > 600)) {

 //600 seconds = 10 minutes
 session_destroy();   
 session_unset();  

 }
 $_SESSION['most_recent_activity'] = time(); // the start of the session.

为了避免像Session fixation 这样的攻击:(会话固定是一种允许攻击者劫持有效用户会话的攻击)定期重新生成会话 ID 说 5 分钟(我建议保持重新生成时间以及会话过期时间多一点)。更详细的攻击列表:attack list

if (!isset($_SESSION['CREATED'])) {
    $_SESSION['CREATED'] = time();
    } 
else if (time() - $_SESSION['CREATED'] > 600) {
    session_regenerate_id(true);    
    $_SESSION['CREATED'] = time();  
    }

另外,请确保将session.gc-maxlifetime 设置为您要使用的最长过期时间。 你可以这样做

ini_set('session.gc-maxlifetime', 600)


或者 直接在你的 php.ini 中设置。

还有

session.cookie_lifetime

session.cookie_lifetime 以秒为单位指定发送到浏览器的 cookie 的生命周期。

但是,销毁会话必须在服务器端而不是客户端小心。 将 session.cookie_lifetime 设置为 0 将使会话 cookie 的行为方式与会话 cookie 一样,即会话 cookie 仅在浏览器关闭之前有效。

这种方法虽然有点繁琐,但是比较优雅。

啊,找到了很久以前看的链接! :How do I expire a PHP session after 30 minutes?

【讨论】:

    【解决方案2】:

    标准 PHP 会话存储在文件中。您可以实现一个简单的 shell 脚本来查找任何在 10 分钟内未触及的会话文件:

    find /path/to/session/dir/* -mmin -10
    

    grep 可用于查找其中存储有 final_ticket_book='N' 值的会话文件:

    grep -l 's:17:"final_ticket_book";s:1:"N";'
    

    (-l 标志让 grep 吐出匹配的文件名)。

    将两者结合起来会得到:

    find /path/to/session/dir -mmin -10|xargs grep -l 's:17:"final_ticket_book";s:1:"N";'|xargs rm -f
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-06
      • 2015-10-08
      • 2021-10-15
      • 2021-12-16
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      相关资源
      最近更新 更多