您的位置:首页 > 编程语言 > PHP开发

PHP cookie session 及 ThinkPHP session 详解

2015-12-13 20:19 721 查看
  摘要:本文不再介绍cookie session的基本原理,主要介绍它们的代码操作规范 和 运行流程/机制。

一 . Cookie

  setcookie()函数有6个参数,这里我只列举最常用的前四个参数:

bool setcookie(string $name[,string $value[,int $expire[,string $path]]]);


参数说明:

$name

  类型:字符串

  说明:cookie的识别名字

$value

  类型:字符串

  说明:cookie的值

$expire

  类型:整形(时间戳)

  说明:cookie的生存期限,为UNIX时间戳,如果没有设定,该cookie在会话结束被删除

$path

  类型:字符串

  默认值:不设定或设定为空字符串,为设定cookie的当前目录

  说明:服务器端的指定路径,设定后,只有该目录及子目录的脚本可以存取此cookie

需要注意的问题:

cookie是HTTP标头的一部分,因此setcookie()函数要在其他信息被输出到浏览器之前调用;

$expire如果要设定,通常是这样 time()+5*60 ,即5分钟后失效;

$path通常可以设定为’/’,表示在整个服务器目录下的脚本都可以存取此cookie;

删除cookie

<?php
//第一种方法,只设定cookie的名字
//cookie值默认为空,则将该cookie的值置为空字符串,isset($_COOKIE['isLogin'])为true
//生存时间默认为空,那么cookie会在浏览器关闭的时候被删除
setcookie('isLogin');
//第二种方法,设定过期时间为历史时间,那么cookie会被立即删除
//isset($_COOKIE['isLogin'])为false
setcookie('idLogin','',time()-1);
?>


二 . Session

  写在前面:可以看到cookie的配置项都在setcookie()函数里面指定,而session的配置是提前在PHP的配置文件里面进行配置,注册和销毁session的时候都不会涉及到过期时间、使用路径的问题。

2.1 配置session

  session的配置项都在PHP的配置文件php.ini中,重要的几个配置项如:session.name/session.use_cookies,因PHP运行环境不同,php.ini的位置也不同,这里不进行详述,网上有很多。

  而且通常这么都不同再配置了,使用默认值就蛮好的了

  我的运行环境是raspberry pi(基于debian的Raspbian版本),记住session文件的位置是/var/lib/php5/sess_*,需要root权限才可以查看session文件。

2.2 注册一个session变量

  代码太简单就不说了。

  但是注册一个session会话就不简单了,当给一个session变量赋值的时候发生了一下这些事情:

session变量的变量名和值被保存在服务器端的session文件中;

这个session文件命名为sess_SESSIONID,这个SESSIONID是由32位16进制数字组成的字符串;

服务器的响应报头里面会有这一行Set-Cookie

PHPSESSID=qielh3lr31aptftavsnj6qfms7; path=/

这样就在浏览器端注册了SESSION_ID,以后浏览器请求服务器端脚本都会带上这个SESSION_ID

2.3 注销session变量与销毁session

  销毁session的代码如下:

<?php
//第一步:开启session
session_start();
//第二步:删除所有session变量,同时也会删除session文件里面的对应数据
$_SESSION = array();
//第三步:如果使用基于cookie的session,则删除浏览器端的cookie
if(isset($_COOKIE[session_name()])){
setcookie(session_name(),'',time()-1);
}
//第四步:彻底销毁session,其实这里是把session文件删除了
session_destory();
?>


三 . ThinkPHP使用session

  访问ThinkPHP的应用,默认开启了session,所以cookie里面就已经有SESSION_ID了,服务器端也已经创建了session存储文件,只是文件是空的。

  ThinkPHP使用session()函数来简化session操作。

  具体用法可以见官方文档

<完>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  session cookie php thinkphp