搜索
缓存时间03 现在时间03 缓存数据 少年有他的山海,有他的重重山影,有他的万里波涛。如果可以,风给他,沙漠给他,天空也给他。是无拘无束的风,会下大雨的沙漠和铺满星辰的天空。万物给他,让他自由。
查看: 49|回复: 3

Discuz X3 的 cookies 有效期修改

[复制链接]
发表于 2024-9-5 16:47:08 | 显示全部楼层 |阅读模式

在研究Discuz的时候发现cookie设定的方法是discuz自带的dsetcookie()这个方法。

于是找到这个方法所在的位置:
这里给出具体路径: source/function/function_core.php文件中
然后找到这cookie的方法:
function dsetcookie($var, $value = '', $life = 0, $prefix = 1, $httponly = false) {
   
    global $_G;

    $config = $_G['config']['cookie'];

    $_G['cookie'][$var] = $value;
    $var = ($prefix ? $config['cookiepre'] : '').$var;
    $_COOKIE[$var] = $value;

    if($value == '' || $life < 0) {
        $value = '';
        $life = -1;
    }

    if(defined('IN_MOBILE')) {
        $httponly = false;
    }
    //如果在有效期内,登陆时间+有效期时间=$lift
    $life = $life > 0 ? getglobal('timestamp') + $life : ($life < 0 ? getglobal('timestamp') - 31536000 : 0);
    $path = $httponly && PHP_VERSION < '5.2.0' ? $config['cookiepath'].'; HttpOnly' : $config['cookiepath'];

    $secure = $_SERVER['SERVER_PORT'] == 443 ? 1 : 0;
    if(PHP_VERSION < '5.2.0') {
        setcookie($var, $value, $life, $path, $config['cookiedomain'], $secure);
    } else {
        setcookie($var, $value, $life, $path, $config['cookiedomain'], $secure, $httponly);
    }
}

我们主要去看看上面方法中红色标记的代码:
解释下:判定$life(cookie有效期)是否大于0,表示调用这个方法的时候传了cookie有效期这个参数,我们不管他,当传入cookie有效期的时候,调用了getglobal()方法,这个方法是获取当前的时间戳(秒),然后加上传入的有效期设定。如果没有传有效期,就是后面的$life<0的操作了,我们不管他,和我们没有关系。
然后我们发现getglobal()+$life。看到么他是当前时间戳加上设定的cookie有效期,这里,我们直接将这个$life修改成我们自己想要的有效期即可。
将上面的红色代码修改成下面代码即可:
$cookie_life = 60*60;//有效期一小时。随便你怎么改,改动这个数据值就可以了。
$life = $life > 0 ? getglobal('timestamp') + $cookie_life : ($life < 0 ? getglobal('timestamp') - 31536000 : 0);

顺便说一下,discuz  X3版本的cookie有效期默认是24小时,也就是1天的时间。如果你不想修改cookie的有效期,修改我们自己的主网站的有效期也可以,设定成24小时就可以了,但是一般情况,我们的有效期一般设定在6小时或8小时最好。不过我喜欢设成6小时,因为,为了安全性,一般一个用户登录网站的时候不会时间太长,比如12小时,很少有用户在这个网站停留12小时的时间,而6小时为最好,不长,不短。太长容易泄密,而太短容易过期。所以一般用户登录完成后,下次再进入这个页面的时候最好去登陆一下,保证用户的安全性。

[发帖际遇]: nyarime 乐于助人,奖励 2 金币. 幸运榜 / 衰神榜
爱生活,爱奶昔~
发表于 2024-9-5 17:00:36 | 显示全部楼层
但是通常来说论坛的登录状态不是很重要,泄露的损失也不是很大,6小时还是带来些许麻烦
[发帖际遇]: Godtokoo 在论坛发帖时没有注意,被小偷偷去了 3 点数. 幸运榜 / 衰神榜
爱生活,爱奶昔~
回复 支持 反对

使用道具 举报

楼主| 发表于 2024-9-5 17:41:00 | 显示全部楼层
Godtokoo 发表于 2024-9-5 17:00
但是通常来说论坛的登录状态不是很重要,泄露的损失也不是很大,6小时还是带来些许麻烦 ...

是这样的,但是这个因素很多... 最好是建议绑定个快捷登录好些
爱生活,爱奶昔~
回复 支持 反对

使用道具 举报

发表于 2024-9-5 19:36:01 | 显示全部楼层
大佬厉害
爱生活,爱奶昔~
回复 支持 反对

使用道具 举报

English 简体中文 繁體中文 한국 사람 日本語 Deutsch русский بالعربية TÜRKÇE português คนไทย french

Powered by Nyarime.

GMT+8, 2024-9-17 03:25 , Processed in 0.019315 second(s), 9 queries , Gzip On, Redis On
发帖际遇·手机版·小黑屋·RSS·奶昔网 |网站地图

登录切换风格
快速回复 返回顶部 返回列表