有条件地设置session.gc_maxlifetime

时间:2013-06-05 13:21:14

标签: php session-variables

我正在使用PHP创建登录/注销系统,客户可以决定是否使用“记住我”按钮。 在我的login.php文件中,我检查他们是否想要记住这样:

if(isset($_POST["remember_me"])){
    $_SESSION["remember_me"] = true;
}

因此,当我想设置gc_maxlifetime时,我需要知道客户端应该被记住。但是我们知道,应该在session_start()之前设置gc_maxlifetime并且我无法访问

$_SESSION["remember_me"]

变量。我该怎么办? 有没有其他方法可以告诉服务器,因为某个会话应该是垃圾收集器的主题?

提前感谢。

1 个答案:

答案 0 :(得分:1)

我不认为使用会话进行持久登录是一个好主意。一个是因为不同的会话有不同的gc_maxlifetime不会工作。正如the manual

  

如果不同的脚本具有不同的session.gc_maxlifetime值,但共享相同的位置来存储会话数据,则具有最小值的脚本将清除数据。在这种情况下,请将此指令与session.save_path一起使用。

因此,除非您还想更改会话存储位置,否则不要去那里。

除了这个问题,您不仅要在服务器上保留他的登录信息,还要保持整个会话。如果您的应用程序在会话中存储了更多数据而您没有正确清理它,那么您的服务器最终将会有一个永远不会再次使用的持久会话。尽管在会话中存储大量数据仍然是错误的,但这是另一种讨论。

为了创建一个记住我的函数,我会在stackexchange上检查how-to-securely-implement-a-remember-me-feature以获取一些指示。