2

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

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

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

$_SESSION["remember_me"]

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

提前致谢。

4

1 回答 1

1

我认为使用会话进行持久登录不是一个好主意。一方面是因为gc_maxlifetime对不同的会话进行不同的操作是行不通的。正如手册所述

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

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

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

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

于 2013-06-05T13:30:49.293 回答