当前位置:  开发笔记 > 编程语言 > 正文

PHP会话超时太快

如何解决《PHP会话超时太快》经验,为你挑选了3个好方法。

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

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

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



1> Álvaro Gonzá..:

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

    PHP默认情况下将会话文件存储在系统临时目录中.

    内置文件处理程序不跟踪谁拥有哪个会话文件(它只是将文件名与会话ID匹配):

    没有什么bug好老文件

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


@ JM4这个答案很好.必须"修改主目录中的每个文件"是一个很大的假设,如果您发现自己处于会话配置更改的情况需要您这样做,那么您应该学习如何构建代码库.在假设代码管理不善的情况下,每个人都应该考虑答案.
@ JM4 - 看一下[include](http://php.net/include)语句系列.

2> Docunext..:

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



3> Rubyist..:

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

// 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 “
”;
    echo “Session information session_get_cookie_params function :: 
”; print_r($CookieInfo); echo “
”;


它确实如此.您可能正在考虑cookie过期.
推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有