PHP基础之Cookie和Session

一、Cookie介绍
cookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制。正统的Cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的Cookie,当然,纯粹的客户端脚本,如JavaScript也可以生成Cookie。

#HTTP 响应头中Set-Cookie字段的属性
 Set-Cookie:myCookie=123;domain=www.baidu.com;path=/one/;expires=Mon,22-Jan-07 07:10:24 GMT;Secure;HttpOnly
 #myCookie=123 cookie的名称和值,名称大小写不明感,值必须经过URL编码
 #domain=www.baidu.com cookie的有效域名,默认当前域名
 #path=/one/ 路径,默认当前目录
 #expires=Mon,22-Jan-07 07:10:24 GMT cookie的有效时间,不设置的话会在浏览器回话就结束删除所有cookie(即会话期cookie)。
 #Secure 仅在HTTPS安全通信时才会发送cookie
 #httpOnly cookie不能被类似JavaScript这样的脚本访问 ,可以有效减少XSS攻击时的身份窃取行为,但并非所有浏览器都支持

1.Cookie 优缺点
优点:不需要服务器资源空间;持久时间更长
缺点:客户端大小受限制;用户可以选择禁用Cookie;不安全

2.Cookie 使用场景
记住用户名密码

3.PHP setcookie() 函数

setcookie(name,value,expire,path,domain,secure)
#name 必需。规定 cookie 的名称。
#value 必需。规定 cookie 的值。
#expire 可选。规定 cookie 的有效期。
#path 可选。规定 cookie 的服务器路径。
#domain 可选。规定 cookie 的域名
#secure 可选。规定是否通过安全的 HTTPS 连接来传输 cookie。
#在发送 cookie 时,cookie 的值会自动进行 URL 编码
#setcookie() 函数必须位于 <html> 标签之前

4.PHP setrawcookie() 函数

setrawcookie(name,value,expire,path,domain,secure)
#和setcookie()几乎完全相同,只不过不会对值自动进行URL编码

二、Session 介绍
Session:在计算机中,尤其是在网络应用中,称为“会话控制”,生存时间为用户在浏览某个网站时,从进入网站到关闭这个网站所经过的这段时间,也就是用户浏览这个网站所花费的时间。
由于Http是一种无状态的的协议,只负责请求服务器,当它在服务器相应之后,就与浏览器失去了联系。不能保存用户的个人信息,就像一个商场和一个自动售货机或者普通的人之间的关系,所以为了弥补这个缺点Session才应声而出,Session需要在4.1版本以上。
session机制采用的是在服务器端保持状态的方案,并且有自己对应的唯一标识session_id,区分不同用户之前的信息。

1.Session 工作原理
Session机制是一种服务端的机制,服务器使用一种类似于散列表的结构来保存信息。相比于保存在客户端的Cookie,Session将用户交互信息保存在了服务器,使得同一个客户端每次和服务端交互式,不需要每次都传回所有的Cookie值,而是只要传回一个ID,这个ID是客户端第一次访问服务器的时候生成的,而且每个客户端都是唯一的。

2、Session的生命周期
Session在以下情况会被删除失效:
(1).Session超时:超时指的是连续一定时间服务器没有收到该Session所对应客户端的请求,并且这个时间超过了服务器设置的Session超时的最大时间;
(2).程序调用方法主动销毁session;
(3).服务器关闭或服务停止。

Session项目实战中都有哪些应用
(1).记录用户登陆信息,全局使用
(2).制作验证码,验证对比操作
(3).将session保存到数据库可以实现:a.控制一个帐号只能一个人登录

Session的优缺点
(1).session的优点:唯一性、方便调用、不会过多占用资源,是存储在服务器的一组临时数据。一般情况下,我们在做用户登录时,会将用户数据存入session。这样,在任何页面都可以方便调用,而且 每个客户端会产生唯一的session_id,不会混肴。并且在关闭浏览器后,服务器会有session回收机制,自动删除过期session
(2).缺点:在客户端是以cookie方式保存的,禁用cookie就没用了。

Session和Cookie的联系以及区别
(1).联系:Session在客户端也需要保存一个标识,所以就要借助Cookie,session是通过cookie来工作的session和cookie之间是通过 C O O K I E [ ′ P H P S E S S I D ′ ] 来 联 系 的 , 通 过 _COOKIE[&#x27;PHPSESSID&#x27;]来联系的,通过 COOKIE[PHPSESSID]_COOKIE[‘PHPSESSID’]可以知道session的id,从而获取到其他的信息。对于客户端禁用Cookie的情况,可以通过在请求URL中带有SessionID达到使用Session的目的。
(2).区别:Cookie机制采用的是在客户端(浏览器)保持状态的方案,而session机制采用的是在服务器端保持状态的方案

PHP Session函数
php的session默认情况下是使用客户端Cookie。当客户端的Cookie被禁用时,会自动通过URL的Query_String传递。
(必须在php.ini中做以下配置:

session.use_trans_sid=1 //是否开启url传递PHPSESSION ID
session.use_only_cookies=0 //是否只允许使用Cookie 传递PHPSESSION ID
session.use_cookies=1 //是否开启Cookie传递PHPSESSION ID
需要保证服务器有session.save_path路径的必要权限。
1、session创建:在PHP中创建Session是用session_start()方法,同Cookie一样,必须将这个函数置于最先,而且在它之前不能有任何输出,否则会报错。同理可以用之前文章介绍过的输出缓冲的方法避免。

2、清空session:session_destroy()方法,此函数没有参数,且返回值均为true。
3、获取Session:PHP中获取session用 S E S S I O N [ _SESSION[ SESSION[name]变量获取,该变量在接收到请求时会自动获取到请求里面带有的Session id,并以数组的格式提取保存着该ID所带有的在服务器端的session数据(session的数据也是采用Key/Value的格式,value格式可支持多种);
4、Session值的修改更新:
可直接通过给 S E S S I O N [ _SESSION[ SESSION[name] 变量赋值的格式更新session值,并且可以立即生效。

PHP Session的自动回收机制
session_start()是session机制的开始,它有一定概率开启垃圾回收,因为session是存放在文件中,PHP自身的垃圾回收是无效的,session的回收是要删除文件的,这个概率是根据php.ini的配置决定的,概率=
session.gc_probability/session.gc_divisor。也可以将概率配置为0,通过cron脚本来实现回收。

参考资料:
Http状态管理机制
PHP中Session和Cookie的探究

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值