PHP会话超时太快

jef*_*n24 34 php session

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

就像我可以在我的代码中添加一些内容或更改php.ini文件中的内容一样?

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

Álv*_*lez 44

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

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

    没有什么bug好老文件

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

  • @ JM4这个答案很好.必须"修改主目录中的每个文件"是一个很大的假设,如果您发现自己处于会话配置更改的情况需要您这样做,那么您应该学习如何构建代码库.在假设代码管理不善的情况下,每个人都应该考虑答案. (10认同)
  • @ JM4 - 看一下[include](http://php.net/include)语句系列. (3认同)
  • 正如我第一次所说的那样,正如您的回答假设他没有完全的 root 访问权限一样,我假设他有并且只在此服务器上运行一个应用程序,并说这可以通过修改 php.ini 设置来轻松管理必须修改主目录中的每个文件。 (2认同)

Doc*_*ext 15

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

  • Ubuntu 也有一个 `/etc/cron.d/php`,它使用 `/etc/php/7.0/fpm/php.ini` 中的 `session.gc_maxlifetime` 从 `/var/lib/php/sessions` 中删除会话. (2认同)

Rub*_*ist 7

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

// Get the current Session Timeout Value
$currentTimeoutInSecs = ini_get(’session.gc_maxlifetime’);
Run Code Online (Sandbox Code Playgroud)

更改会话超时值

// 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>”;
Run Code Online (Sandbox Code Playgroud)

  • 它确实如此.您可能正在考虑cookie过期. (4认同)