discuz论坛的cookie有效期修改的教程

2018-10-26 2064 0条评论

discuz修改cookie的有效期使其延长或缩短,迎合我们主网站的cookie有效期的方法如下:

从网上搜索发现有写人写的根本找不到文件,因为版本的问题,好多文件都被整合了,下面我们以discuz X3最新版本为例:

根据cookie设定,我发不难猜想cookie设定,必须有cookie(..........)这个方法,因为phpcookie设定必须有php自带的cookie方法才行,呢我们去搜索discuz的cookie在哪里。

搜索后我们发现cookie()这个方法太多,我们去看看用dw站点搜索看看有多少吧:


我们发现有468个其中包含我自己定义cookie在内,还是比较多。咋办呢。。。。。。
在以前的我的关于discuz的博客中,提及到yii于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小时为最好,不长,不短。太长容易泄密,而太短容易过期。所以一般用户登录完成后,下次再进入这个页面的时候最好去登陆一下,保证用户的安全性。

文章版权及转载声明

本文作者:符文浩 网址:http://blog.fuwenhao.com/post/173.html 发布于 2018-10-26
文章转载或复制请以超链接形式并注明出处。

发表评论

快捷回复:

评论列表 (暂无评论,2064人围观)参与讨论

还没有评论,来说两句吧...

取消
微信二维码
微信二维码
支付宝二维码