Discuz! X cookie的设置与使用详解
最近在做Discuz!系列的插件,需要用到cookie,我在编写插件的时候如果不加入session_start函数cookie就无法使用。
操作方法
- 01
Discuz!X cookie生成文件位置 source\function\function_core.php
- 02
Discuz!X cookie封装源码 生成COOKIE <?php 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; } $life = $life > 0 ? getglobal('timestamp') + $life : ($life < 0 ? getglobal('timestamp') - 31536000 : 0); $path = $httponly && PHP_VERSION < '5.2.0' ? $config['cookiepath'].'; HttpOnly' : $config['cookiepath']; $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); } }
- 03
Discuz!X cookie封装源码 读取COOKIE <?php function getcookie($key) { global $_G; return isset($_G['cookie'][$key]) ? $_G['cookie'][$key] : ''; }
- 04
Discuz!X cookie封装源码 设置cookie: <?php dsetcookie('cookie名', 'cookie值', '有效时间');
- 05
Discuz!X cookie封装源码 dsetcookie()方法分析 function dsetcookie($var, $value = '', $life = 0, $prefix = 1, $httponly = false) dsetcookie()还有两个参数 $prefix与 $httponly $prefix为是否添加cookie前缀,true则自动添加网站的前缀,false则不添加 $httponly表示是否只允许http方式访问,这两个值只要默认值即可,有需要可另外设置,不过当用户访问的是手机版则$httponly会被自动设置为false, 见function_core.php第272行 if(defined('IN_MOBILE')) { $httponly = false; }
- 06
Discuz!X cookie封装源码 在程序中读取cookie第一种使用getcookie函数: getcookie('cookie名');第二种直接访问全局变量$_G: $_G['cookie']['cookie名']