9

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

安全性确实不是内容的问题,理想情况下,我希望有人保持登录数天或数周。但是,在 Google 上搜索有关会话长度的任何内容都会让我发现希望缩短注销计时器的人。

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

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

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

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

3 回答 3

10

编辑您的 .htaccess 并输入如下内容:

php_value session.gc_maxlifetime 2000

2000 以秒为单位。相应设置!这将告诉会话垃圾收集器在 2000 秒内不要销毁会话。此外,不推荐使用 session_register。

于 2013-04-26T02:29:51.507 回答
8

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

您可以使用.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)的更多信息。

于 2013-04-26T02:38:43.090 回答
5

如果您使用 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 参数垃圾收集的信息

于 2013-04-26T02:35:50.170 回答