php如何长时间保持会话状态?麻烦

时间:2010-02-19 14:40:38

标签: php session

我在长时间保存会话状态时遇到问题。我使用会话来保留登录状态。在任何其他代码之前,我在每个页面的顶部都需要以下代码段。首先,我缺少任何设置吗?

session_cache_expire(2880); //set session to expire in 48 hours 
session_start();

有些人在48小时到期之前就已退出。什么类型的东西可能导致这种情况?我知道关闭浏览器可以杀死会话,但事实并非如此。

据我所知,当用户闲置数小时或更长时间时会发生这种情况。

在主动浏览网站时,用户永远不会被注销。

是什么给出的?

2 个答案:

答案 0 :(得分:1)

这只影响浏览器缓存会话页面的时间。

尝试设置gc_maxlifetime变量(值以秒为单位):

ini_set("session.gc_maxlifetime", "172800");

答案 1 :(得分:1)

session_cache_expire仅影响HTTP缓存过期时间。您要做的是使用cookie来设置会话数据。

以下是我用于登录/退出会话的示例。

<?php

session_start();

if ($action == "logout") {
  setcookie('sId', '', time()-60*60*24*365); //set sId cookie to expire

  session_destroy();
} else if (empty($_SESSION['sId'])) { //if cannot get sId from session
  if (isset($_COOKIE['sId'])) { //check if sId is in cookie
    $sId = $_COOKIE['sId'];
  } else { //get a new sId and set to cookie
    $sId = session_id();
    setcookie('sId', $sId, time()+60*60*24*365);
  }

  $_SESSION['sId'] = $sId; 
} else { //get sId from session
    $sId = $_SESSION['sId'];
}

?>