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的方法:
- 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']; //Vevb.com
- $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小時為最好,不長,不短。太長容易泄密,而太短容易過期。所以一般用戶登錄完成后,下次再進入這個頁面的時候最好去登陸一下,保證用戶的安全性.
新聞熱點
疑難解答