我正在为一个与我合作的小型(阅读:< 50用户)非营利组织工作,我的PHP知识相当有限。目前我有一个登录脚本,我从在线教程中找到。我遇到的问题是每个用户在大约一个小时左右后就会注销。
安全性确实不是内容的问题,理想情况下,我希望有人能够在多天或几周内保持登录状态。但是,任何关于会话长度的谷歌搜索都会让我想要缩短退出计时器的人。
就代码而言,登录页面将用户名和密码与数据库进行比较,然后执行以下操作:
session_register("myusername");
session_register("mypassword");
header("location:index.php")
在每个受保护的页面上,它以:
开头session_start();
if(!session_is_registered(myusername)){
header("location:login.html:);
}
答案 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
仅建议何时应该对会话进行垃圾回收,并不意味着它会发生。