PHP cookie session 及 ThinkPHP session 详解
2015-12-13 20:19
721 查看
摘要:本文不再介绍cookie session的基本原理,主要介绍它们的代码操作规范 和 运行流程/机制。
参数说明:
$name
类型:字符串
说明:cookie的识别名字
$value
类型:字符串
说明:cookie的值
$expire
类型:整形(时间戳)
说明:cookie的生存期限,为UNIX时间戳,如果没有设定,该cookie在会话结束被删除
$path
类型:字符串
默认值:不设定或设定为空字符串,为设定cookie的当前目录
说明:服务器端的指定路径,设定后,只有该目录及子目录的脚本可以存取此cookie
需要注意的问题:
cookie是HTTP标头的一部分,因此setcookie()函数要在其他信息被输出到浏览器之前调用;
$expire如果要设定,通常是这样 time()+5*60 ,即5分钟后失效;
$path通常可以设定为’/’,表示在整个服务器目录下的脚本都可以存取此cookie;
删除cookie
而且通常这么都不同再配置了,使用默认值就蛮好的了
我的运行环境是raspberry pi(基于debian的Raspbian版本),记住session文件的位置是/var/lib/php5/sess_*,需要root权限才可以查看session文件。
但是注册一个session会话就不简单了,当给一个session变量赋值的时候发生了一下这些事情:
session变量的变量名和值被保存在服务器端的session文件中;
这个session文件命名为sess_SESSIONID,这个SESSIONID是由32位16进制数字组成的字符串;
服务器的响应报头里面会有这一行Set-Cookie
PHPSESSID=qielh3lr31aptftavsnj6qfms7; path=/
这样就在浏览器端注册了SESSION_ID,以后浏览器请求服务器端脚本都会带上这个SESSION_ID
ThinkPHP使用session()函数来简化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操作。
具体用法可以见官方文档
<完>
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- kindeditor 批量上传 上传失败 thinkphp swfupload session
- Php Installing An Expansion
- 杰奇登录后的东西都是在session里面的
- cookie的secure属性详解
- 浏览器 cookie 限制
- ASP中SESSION无法保存问题的解决办法
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充