最近在做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名']
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有