PHP会话太快
我在我的网站上使用php会话,似乎他们随机间隔“消失”。 我不知道是否由于不活动而导致超时,或者如果我的代码有问题,但有什么方法来控制它们何时到期的会话?
就像我可以把东西放在我的代码或改变php.ini文件中的东西?
更新 –只是在这里更新,我切换主机,神奇的会议开始工作。 我不知道什么是错的,但显然他们不想正常工作。
随机过期是几个应用程序共享的会话数据目录的经典症状:具有最短session.gc_maxlifetime
时间的那个可能会从其他应用程序中删除数据。 原因:
- PHP默认将会话文件存储在系统临时目录中。
-
内置文件处理程序不会跟踪谁拥有哪个会话文件(它只是与会话ID匹配的文件名):
我的build议是,你为你的应用程序configuration一个私人的自定义会话目录。 这可以通过session_save_path()
函数或者设置session.save_path
configuration指令来完成 。 请检查您的框架的文档,了解如何在您自己的代码库中执行的详细信息。
Debian使用cron作业以安全的方式自动使会话过期。 如果您使用的是Debian,请查看/etc/cron.d/php5。
你可以使用它来使你的应用程序兼容你。你必须根据你的系统做一些改变
// 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>”;
祝一切顺利 !!!!
尝试使用这部分代码:
session_start(); $inactive = 600; $session_life = time() - $_SESSION['timeout']; if($session_life > $inactive) { session_destroy(); header("Location: logoutpage.php"); } $_SESSION['timeout']=time();