PHP会话超时太快

时间:2010-08-13 11:55:44

标签: php session

我在我的网站上使用php Sessions,似乎它们随机间隔“消失”。我不知道他们是否由于不活动或者我的代码出现问题而超时,但是有没有办法控制会话到期时的会话?

我可以在代码中添加内容或在php.ini文件中更改内容吗?

更新 - 所以只是在这里更新,我切换主机并神奇地开始工作。我不知道出了什么问题,但显然他们不想正常工作。

4 个答案:

答案 0 :(得分:44)

随机过期是多个应用程序共享的会话数据目录的典型症状:具有最短session.gc_maxlifetime时间的应用程序可能会从其他应用程序中删除数据。原因是:

  1. 默认情况下,PHP会将会话文件存储在系统临时目录中。
  2. 内置文件处理程序不会跟踪谁拥有哪个会话文件(它只是将文件名与会话ID匹配):

    Nothing bug good old files

  3. 我的建议是为应用程序配置私有自定义会话目录。可以使用session_save_path() function或设置session.save_path configuration directive来完成。请查看您的框架文档,了解有关如何在您自己的代码库中执行此操作的详细信息。

答案 1 :(得分:14)

Debian使用cron作业以安全的方式自动使会话过期。如果您使用的是Debian,请查看/etc/cron.d/php5。

答案 2 :(得分:6)

您可以使用它来根据您的要求使您的应用程序兼容。您必须根据您的系统进行一些更改

// Get the current Session Timeout Value
$currentTimeoutInSecs = ini_get(’session.gc_maxlifetime’);

更改会话超时值

// Change the session timeout value to 30 minutes  // 8*60*60 = 8 hours
ini_set(’session.gc_maxlifetime’, 30*60);
//————————————————————————————–

// php.ini setting required for session timeout.

ini_set(‘session.gc_maxlifetime’,30);
ini_set(‘session.gc_probability’,1);
ini_set(‘session.gc_divisor’,1);

//if you want to change the  session.cookie_lifetime.
//This required in some common file because to get the session values in whole application we need to        write session_start();  to each file then only will get $_SESSION global variable values.

$sessionCookieExpireTime=8*60*60;
session_set_cookie_params($sessionCookieExpireTime);
session_start();

// Reset the expiration time upon page load //session_name() is default name of session PHPSESSID

if (isset($_COOKIE[session_name()]))
    setcookie(session_name(), $_COOKIE[session_name()], time() + $sessionCookieExpireTime, “/”);
    //————————————————————————————–
    //To get the session cookie set param values.

    $CookieInfo = session_get_cookie_params();

    echo “<pre>”;
    echo “Session information session_get_cookie_params function :: <br />”;
    print_r($CookieInfo);
    echo “</pre>”;

答案 3 :(得分:3)

尝试使用这部分代码:

  session_start();
  $inactive = 600;
  $session_life = time() - $_SESSION['timeout'];
  if($session_life > $inactive) { 
     session_destroy(); 
     header("Location: logoutpage.php"); 
  }
  $_SESSION['timeout']=time();