Discuz!的cookie机制

最近在做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还有两个参数prefixhttponly,prefixcookietruefalsehttponly表示是否只允许http方式访问,这两个值只要默认值即可,有需要可另外设置,不过当用户访问的是手机版则$httponly会被自动设置为false,见function_core.php第272行
    if(defined('IN_MOBILE')) {
     $httponly = false;
    }
    
    读取cookie有两种方法,第一种使用getcookie函数:
    getcookie('cookie名');
    第二种直接访问全局变量$_G:
    $_G['cookie']['cookie名']

posted @   joshua317  阅读(2576)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示