当前位置:首页 > CMS教程 > Discuz > 列表

discuz cookie有效期修改

发布:smiling 来源: PHP粉丝网  添加日期:2015-09-30 11:01:17 浏览: 评论:0 

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

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

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

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

找到 468 项(在4708文档)

我们发现有468个其中包含我自己定义cookie在内,还是比较多。咋办呢。。。。。。

在以前的我的关于discuz的博客中,提及到yii于discuz整合登陆的操作,其中我们发现cookie设定的方法是discuz自带的dsetcookie()这个方法。呢么我们找到这个方法所在的位置:

这里给出具体路径:source/function/function_core.php文件中,然后找到这cookie的方法:

  1. function dsetcookie($var$value = ''$life = 0, $prefix = 1, $httponly = false) { 
  2.     
  3.     global $_G
  4.  
  5.     $config = $_G['config']['cookie']; 
  6.  
  7.     $_G['cookie'][$var] = $value
  8.     $var = ($prefix ? $config['cookiepre'] : '').$var
  9.     $_COOKIE[$var] = $value
  10.  
  11.     if($value == '' || $life < 0) { 
  12.         $value = ''
  13.         $life = -1; 
  14.     } 
  15.  
  16.     if(defined('IN_MOBILE')) { 
  17.         $httponly = false; 
  18.     } 
  19.     //如果在有效期内,登陆时间+有效期时间=$lift 
  20.     $life = $life > 0 ? getglobal('timestamp') + $life : ($life < 0 ? getglobal('timestamp') - 31536000 : 0); 
  21.     $path = $httponly && PHP_VERSION < '5.2.0' ? $config['cookiepath'].'; HttpOnly' : $config['cookiepath']; //phpfensi.com 
  22.  
  23.     $secure = $_SERVER['SERVER_PORT'] == 443 ? 1 : 0; 
  24.     if(PHP_VERSION < '5.2.0') { 
  25.         setcookie($var$value$life$path$config['cookiedomain'], $secure); 
  26.     } else { 
  27.         setcookie($var$value$life$path$config['cookiedomain'], $secure$httponly); 
  28.     } 

我们主要去看看上面方法中红色标记的代码:

解释下:判定$life(cookie有效期)是否大于0,表示调用这个方法的时候传了cookie有效期这个参数,我们不管他,当传入cookie有效期的时候,调用了getglobal()方法,这个方法是获取当前的时间戳(秒),然后加上传入的有效期设定。如果没有传有效期,就是后面的$life<0的操作了,我们不管他,和我们没有关系。

然后我们发现getglobal()+$life。看到么他是当前时间戳加上设定的cookie有效期,这里,我们直接将这个$life修改成我们自己想要的有效期即可。

将上面的红色代码修改成下面代码即可:

  1. $cookie_life = 60*60;//有效期一小时。随便你怎么改,改动这个数据值就可以了。 
  2. $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小时为最好,不长,不短。太长容易泄密,而太短容易过期。所以一般用户登录完成后,下次再进入这个页面的时候最好去登陆一下,保证用户的安全性.

Tags: discuz有效期 cookie有效期

分享到: