在 apache php.ini 文件中延长会话最大超时的后果是什么?


What are the consequences of extending sessions max timeout in the apache php.ini file?

我正在建立一个网站,我宁愿不把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

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,这意味着检查上述超时值的概率为 1/100。

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

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

然而

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

b( 除非你真的要加倍努力来阻止所有 cookie,否则无论如何都会使用 cookie 来设置 PHP 会话 ID,所以你真的对你的用户有什么好处吗?