需要帮助使PHP登录会话持续更长时间

时间:2013-04-26 02:26:02

标签: php session login duration

我正在为一个与我合作的小型(阅读:< 50用户)非营利组织工作,我的PHP知识相当有限。目前我有一个登录脚本,我从在线教程中找到。我遇到的问题是每个用户在大约一个小时左右后就会注销。

安全性确实不是内容的问题,理想情况下,我希望有人能够在多天或几周内保持登录状态。但是,任何关于会话长度的谷歌搜索都会让我想要缩短退出计时器的人。

就代码而言,登录页面将用户名和密码与数据库进行比较,然后执行以下操作:

session_register("myusername");
session_register("mypassword");
header("location:index.php")

在每个受保护的页面上,它以:

开头
session_start();
if(!session_is_registered(myusername)){
header("location:login.html:);
}

3 个答案:

答案 0 :(得分:9)

编辑你的.htaccess并输入类似的内容:

php_value session.gc_maxlifetime 2000

2000秒。相应地设定!这将告诉会话垃圾收集器不要销毁2000秒的会话。此外,不推荐使用session_register。

答案 1 :(得分:6)

鉴于您的问题和用户群的规模,我选择全局设置更改而不是尝试自定义会话变量;它很简单,可以满足您的需求,并且只需要很少的努力就可以应用于所有用户。

您可以使用.htaccess文件设置全局会话生存期(如其他答案中所述):

php_value session.gc_maxlifetime 86400 //this is one day in seconds

或者,您也可以在php.ini文件中设置它 - 其片段是:

; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
session.gc_maxlifetime = 86400

除了纯粹的参考之外,您需要考虑长期垃圾收集的值:

86400 = one day
604800 = one week

您可以阅读有关垃圾收集(gc)here的更多信息。

答案 2 :(得分:4)

如果您使用PHP的默认基于cookie的会话管理(我相信您,因为您没有提及有关更改默认会话的工作方式),您可以使用:

session_set_cookie_params(7200); // in seconds...session will last for 2 hours now
session_start(); //once session cookie parameter is set, start the session..

session.gc* ini值组也用于此目的,但请记住gc仅建议何时应该对会话进行垃圾回收,并不意味着它会发生。

您可以阅读cookie params heregarbage collection here