【问题标题】:PHP session_set_cookie_params() issuePHP session_set_cookie_params() 问题
【发布时间】:2013-03-12 03:56:36
【问题描述】:

对于我登录部分的每个页面的标题,我添加了以下代码来维护会话:

session_set_cookie_params(1200, '/mysystem');
session_start();

我的意图是,我通过函数 session_set_cookie_params() 将会话生命周期设置为 1200 秒,路径为 /mysystem。使用此函数的原因是将会话 cookie 与同一域中的其他 PHP 脚本分开,例如http://www.example.com/another_system/

问题是,会话在达到 1200 秒时过期,无论有没有活动(例如在 /mysystem 下加载另一个页面,或刷新页面。

预期行为:当活动会话有效时进行页面活动时,会话“倒计时”会重置。

我错过了什么?

【问题讨论】:

  • 您想“自动延长会话超时时间”吗?也许这会有所帮助stackoverflow.com/questions/514155/…
  • 不,因为它不考虑仅将会话变量隔离到特定路径,这是使用函数session_set_cookie_param()的意图。

标签: php


【解决方案1】:

这就是它的工作原理。 cookie 设置一次,然后开始倒计时。为了解决这个问题,您必须在每次用户与后端交互时使用新的过期日期重置 cookie。

【讨论】:

  • 如何重置计时器?我以为session_set_cookie_param 已经重置了计时器。我应该设置为 0 而不是 1200?现有的会话变量会丢失吗?
  • 您只需要确保在客户端存储了一个新的 cookie。我认为的一种方法是致电session_regenerate_id()
  • 我发现将值设置为0 将实现目标。
  • 只要浏览器窗口打开,cookie 就会保持活动状态。这实际上是一个不同的解决方案,但如果它适合您,那就太好了。
  • 会话生命周期和cookie生命周期是两个不同的东西。当 cookie 过期时,用户将失去与后端会话的链接,从而注销。但是,当用户将选项卡打开一个小时时,cookie 仍然存在,但后端的会话将过期(取决于php.ini 设置),因此存储在 cookie 中的会话 ID 不会不再匹配后端的会话。在这种情况下,用户也会被注销。
【解决方案2】:

你可以试试time()函数来更新cookie过期时间。

尝试在每个页面添加time()函数,获取当前页面加载时间并使其过期

通过 $expireTime = time()+1200;

      <?php

          session_set_cookie_params($expireTime, '/mysystem');
          session_start()
       ?>

【讨论】:

  • 不工作,$expireTime 的值会不断增加
  • @ShivanRaptor 是的,每当页面加载/重新加载时,时间都会更新,过期时间也会增加......
  • 场景:用户在有效会话中刷新页面200次,$expireTime将变为1363948541+1200,在用户的有生之年(我指的是人的一生)中不会过期。
  • @ShivanRaptor 检查这可能对你有用http://stackoverflow.com/questions/9124560/how-to-expire-php-session-if-user-is-inactive-for-15-分钟
  • 谢谢,但没用,因为它不考虑仅将会话变量隔离到特定路径,这是使用函数session_set_cookie_param()的意图。
猜你喜欢
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 2019-08-07
  • 2020-10-09
  • 2011-02-18
相关资源
最近更新 更多