请选择 进入手机版 | 继续访问电脑版
查看: 18|回复: 0

Discuz中cookie机制理解,cookie设置和获取方法

[复制链接]

634

主题

636

帖子

3228

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3228
发表于 7 天前 | 显示全部楼层 |阅读模式
Discuz中cookie机制理解,cookie设置和获取方法

这段时间在做Discuz插件,用到了cookie,感觉有个问题很是奇怪,Discuz程序中cookie被大量使用,然而在开发Discuz插件时假如不引入session_start函数cookie更无法使用,按道理来讲Discuz程序这么多使用cookie的场景,Discuz核心程序中应该有调用session_start吧。并且Discuz程序在生成cookie名时都会带有一个前缀的,一直不清楚这个前缀规律怎么样的,那么作为Discuz开发者该怎么调用内置的cookie呢?

研究了很久终于查到了一些资料,Discuz程序将PHP的setcookie()函数封装成了dsetcookie(),顺藤摸瓜于function_core.php核心文件中找到了以下两个函数:
  1. function dsetcookie(var,var,value = '', life=0,life=0,prefix = 1, $httponly = false) {
  2. //dsetcookie程序源码忽略
  3. }

  4. function getcookie($key) {
  5.      global $_G;
  6.      return isset(G[′cookie′][G[′cookie′][key]) ? G[′cookie′][G[′cookie′][key] : '';
  7. }
复制代码

那么,在Discuz程序中调用cookie的思路是这样的:

1、Discu cookie设置方法:
  1. dsetcookie('cookie名', 'cookie值', '有效时间');
复制代码
Discuz cookie设置函数dsetcookie()中有两个参数prefix和httponly:
prefix为是否添加cookie前缀,true则自动添加网站的前缀,false则不添加;
httponly表示是否只允许http方式访问;
这两个值只要默认值即可,有需要可另外设置。

但当用户访问的是手机版则$httponly会被自动设置为false,见function_core.php源码中的以下代码部分:
  1. if(defined('IN_MOBILE')) {
  2.      $httponly = false;
  3. }
复制代码

2、Discu cookie获取方法
获取cookie有两种方法,分别是getcookie()函数和全局变量$_G。

1)第一种使用getcookie函数获取cookie:
  1. echo getcookie('cookie名');
复制代码

2)第二种直接使用全局变量$_G获取cookie:
  1. echo $_G['cookie']['cookie名'];
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|蓄财网 ( 豫ICP备2021002293号 )

GMT+8, 2021-10-19 20:57 , Processed in 0.102035 second(s), 32 queries .

蓄财网 ©版权所有

© 2021 蓄财网(www.aixc.cn)

快速回复 返回顶部 返回列表