【问题标题】:PHP session is getting expired for every 1 hour automaticallyPHP会话每1小时自动过期
【发布时间】:2014-07-31 12:40:15
【问题描述】:

我正在设置一个 PHP 会话,以便在登录后 4 小时内有效。但会话将在整整时间(@1 AM、2 AM、3 AM 等)到期。

例如:如果在上午 12.00 或 12.30 登录,会话将在凌晨 1 点到期。

共享主机中是否为会话进行了任何默认设置?

我已尝试更改会话保存路径和会话寿命,但没有使用。

这是我在登录页面期间的代码。

// server should keep session data for AT LEAST 4 hour
ini_set(session.save_path, "/home/web/session"); 
ini_set('session.gc_maxlifetime', 14400);
session_start();
$_SESSION['login'] = 1;
$_SESSION['sessionid']=session_id();

在其他页面中:

if($_SESSION['login'] == 1  $_SESSION['sessionid']==session_id()) 
{ 
    echo "you are aleady logged in...";
}
else
{ echo "you are not logged in..." ; //this is occurring exactly every hour
}

您能帮我解决这个问题吗?

【问题讨论】:

  • ini_set(session.save_path, "/home/web/session"); 应该是ini_set("session.save_path", "/home/web/session");
  • 对 debian session_save_path 感兴趣需要将垃圾收集器 session.gc_probability 的附加值设置为 1,以便 GC 从自定义会话文件夹中清除旧会话。但在你的情况下,它会被自动删除。可能您需要为此联系托管服务。
  • @AbhikChakraborty :我正在使用我自己的会话文件夹。怎么会自动删除?
  • 就像session_save_path("/home/web/session")那样做

标签: php session


【解决方案1】:

Session_start() 必须在其他一切之前。那可能是你的问题。无论如何,这种方式非常不可靠,因此最好创建自己的会话超时:

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 14400)) {
    // last request was more than 30 minutes ago
    session_unset();     // unset $_SESSION variable for the run-time 
    session_destroy();   // destroy session data in storage
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp

【讨论】:

  • 在设置会话参数之前肯定不行!
  • $_SESSION['LAST_ACTIVITY']系统变量?
  • $_SESSION 是一个超级全局变量,您可以保存用户上次登录的时间。因此,当 4 小时很容易检测到它。
  • @robinp7720 :我面临的问题是,会话值每小时都是空的。所以上面的 if 条件在 4 小时内都不起作用。
猜你喜欢
  • 2014-05-27
  • 2016-05-22
  • 2016-10-31
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 2018-07-29
  • 2017-05-01
  • 2011-04-07
相关资源
最近更新 更多