【一】会话控制
会话支持一般指cookie和session,在ThinkPHP里为了方便开发,封装了cookie和session方法。
(1)session方法
在函数库封装了session方法
session(‘name‘,‘value‘) 创建一个名为name的session,值为value
$value = session(‘name‘) 读取session中的name元素值,并赋值给变量$value
session(‘name‘,null) 删除session中名为name元素的值
session(null) 删除全部session值
session() 读取全部的session信息
session(‘?name‘) 判断名为name的session元素是否存在,存在返回true,否则返回false
案例:在方法中使用session方法,对session进行操作
①设置session
session(‘name‘,‘tony‘); session(‘age‘,‘23‘); var_dump($_SESSION);
②读取session
$value = session(‘name‘);
下面案例比较简单,不一一列举
(2)cookie方法
在函数库封装了cookie方法
cookie(‘name‘,‘value‘) 创建一个名为name的cookie,值为value
cookie(‘name‘,‘value‘,3600) 创建一个名为name的cookie,值为value,有效期为3600s
$value=cookie(‘name‘) 读取名为name的cookie,赋值给value
cookie(‘name‘,null) 删除名为name的cookie
cookie(null) 删除所有,但是测试后发现无效。查看手册,发现该方法有BUG。若想实现,则需更改底层实现代码。在下面写到
cookie() 获取全部的cookie注意:若不指定时间,则session会话结束时到期。
修改底层代码:
// 清除指定前缀的所有cookie if (is_null($name)) { if (empty($_COOKIE)) return null; // 要删除的cookie前缀,不指定则删除config设置的指定前缀 $prefix = empty($value) ? $config[‘prefix‘] : $value; if (!empty($prefix) || $name == null) {// 如果前缀为空字符串将不作处理直接返回 foreach ($_COOKIE as $key => $val) { if (0 === stripos($key, $prefix)||$name == null) {//函数库1379行 setcookie($key, ‘‘, time() - 3600, $config[‘path‘], $config[‘domain‘],$config[‘secure‘],$config[‘httponly‘]); unset($_COOKIE[$key]); } } } return null; }elseif(‘‘ === $name){ // 获取全部的cookie return $_COOKIE; }