1

我正在建立一个网站,我不想在人们的计算机上放置 cookie。将会话最大超时时间延长到一天或两天是不好的做法 - 或者更糟糕的是非常不安全?

    session_regenerate_id();
    $profileid = $userdata['userid'];
    $profile = $userdata['username'];
    //Set session
    $_SESSION['profileid'] = $profileid;
    //Put name in session
    $_SESSION['profile'] = $profile;
    $_SESSION['loggedin'] = true;

编辑:添加代码。编辑:我要修改的 php.ini 行是:

session.gc_maxlifetime = 1440
4

2 回答 2

1

只要您的代码总体上是安全的,我认为它没有什么特别不安全的地方。

然而

a) 如果用户关闭浏览器,他们将丢失他们的数据——他们可能出于任何原因这样做。如果您需要确保数据在会话之间保留更长时间,除非用户明确选择退出,否则请使用 cookie。否则,坚持不吃饼干似乎会适得其反。澄清一下,我想我的意思是,如果标准会话生命周期不够长,那么您可能不应该使用 $_SESSION 来存储数据。从本质上讲,$_SESSION 是短暂的,只能用于相当短暂的事情。

b) 除非您真的要加倍努力来阻止所有 cookie,否则 PHP 会话 id 无论如何都会使用 cookie 设置,那么您真的在帮助您的用户吗?

于 2012-05-07T00:55:20.060 回答
1

session.gc_maxlifetime

session.gc_maxlifetime 指定数据将被视为“垃圾”并可能被清理的秒数。垃圾收集可能在会话开始期间发生(取决于 session.gc_probability 和 session.gc_divisor)。

此值(默认为 1440 秒或 [24 分钟])定义未使用的 PHP 会话将保持活动状态的时间。

例如:用户登录,浏览您的应用程序或网站,数小时,数天。没问题。只要他的点击之间的时间不超过1440秒。这是一个超时值,

PHP 的会话垃圾收集器以session.gc_probability除以session.gc_divisor定义的概率运行。默认情况下,这是 1/100,这意味着以 100 分之一的概率检查上述超时值。

因此,增加此值很可能不会对您的脚本产生太大影响,除非您希望您的用户不会点击您的网站。就像登录用户观看长视频然后在观看后发现自己退出的情况一样。如果是这种情况,也许您应该使用一些 javascript 每 20 分钟轮询一次服务器以保持会话打开。

于 2012-05-07T00:59:20.823 回答