Discuz!的cookie機制

來源:互聯網
上載者:User

最近在做Discuz!的外掛程式,需要用到cookie,一直覺得奇怪的一個問題,Discuz!大量使用了cookie,但是我在編寫外掛程式的時候如果不加入session_start函數cookie就無法使用,按理說Discuz!使用了這麼多cookie它的核心應該有調用session_start呀?而且Discuz!產生的cookie名都是帶有一個首碼的,一直不知道這個首碼規律如何,那我又要如何調用內建的cookie呢?
    後來查了一下資料,Discuz!把PHP的setcookie函數封裝成了dsetcookie。順藤摸瓜,在function_core.php裡面找到了這兩個函數:
    function dsetcookie($var, $value = '', $life = 0, $prefix = 1, $httponly = false) {
    源碼略
    }
    
    function getcookie($key)
    {
     global $_G;
     return isset($_G['cookie'][$key]) ? $_G['cookie'][$key] : '';
    }
    那麼在Discuz!中調用cookie的思路出來了:
    設定cookie:dsetcookie('cookie名', 'cookie值', '有效時間');
    源碼中dsetcookie還有兩個參數$prefix與$httponly,$prefix為是否添加cookie首碼,true則自動添加網站的首碼,false則不添加,$httponly表示是否只允許http方式訪問,這兩個值只要預設值即可,有需要可另外設定,不過當使用者訪問的是手機版則$httponly會被自動化佈建為false,見function_core.php第272行
    if(defined('IN_MOBILE')) {
     $httponly = false;
    }
    
    讀取cookie有兩種方法,第一種使用getcookie函數:
    getcookie('cookie名');
    第二種直接存取全域變數$_G:
    $_G['cookie']['cookie名']

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.