会话技术整理
Cookie基本使用(增删改查)
创建cookie(增加)
setcookie();setcookie有7个参数:
参数1:保存的cookie变量名称
参数2:变量对应的值
参数3:cookie文件的有效期
参数4:有效路径
参数5:有效域名(cookie不支持跨域使用,可以通过参数5指定cookie在哪个域名下起作用)
参数6:是否只允许在https协议下使用。如果设置为true,就表示该cookie只能在https协议下进行传输
参数7:为了防止cookie被劫持定义的参数,只允许在http协议下传输(在web服务器下进行传输)。如果设置为false,允许该cookie在任何协议下都能传输
读取cookie(查询)
$_COOKIE['age'];
修改cookie
如果给同一个cookie变量重新赋值,就是修改的意思,而且cookie的有效期会从修改的时间重新计算。
删除cookie
将cookie的有效期设置为过期
细节:
setcookie前面不能有任何输出,echo 、var_dump()等
因为setcookie是服务器告诉浏览器的,告诉浏览器在自己身上创建cookie文件,服务器向浏览器回应信息是通过header头信息回应的
为什么要使用会话控制技术
HTTP协议是无状态的,也就是说HTTP没有一个内建的机制来维护两个事务之间的状态。当一个用户完成一个请求发起第二个请求的时候,服务器无法知道这次请求是来自于上一次的客户。而用户登录、购物车等,这些是需要服务器能够保存用户的状态的。会话技术就是用来完成这件事的。其思想是允许服务器跟踪客户端做出的连续请求。
会话控制技术的实现方式
通过GET参数传递
在get里面把状态传递到下一页
使用get参数传递不安全而且不稳定,不建议使用
Cookie
Cookie本质上是服务器发送给客户端的片段信息,存储在客户端浏览器的内存或者是硬盘中的技术。
- Cookie的写入操作
setcookie($name,$value,$expire,$path,$domain,$secure)
- 读取Cookie
$_COOKIE
数组 - 删除Cookie
删除cookie不能使用unset,因为$_COOKIE是只读的。要想删除,只需要让其过期就就行:
setcookie($name,'',time()-1000)
- Cookie的优缺点
- 优点:存储在客户端,不会占用服务器的资源
- 缺点:信息保存在客户端,安全性得不到保障,而且用户可以关闭cookie。
- 优点:存储在客户端,不会占用服务器的资源
Session
Session将数据保存在服务器上,相比cookie更加安全。
session并不是完全脱离cookie,他是基于cookie的(需要将sessionid保存在客户端,如果cookie被禁用,可以通过url来传递sessionid)
- session 的操作
session_start();//要使用之前一定要开启
- 然后直接操作
$_SESSION
数组 - 要删除,直接赋空数组:
$_SESSION = [];
- 如果想删除文件,则使用
session_destroy();//同时会删除对应session的cookie
- session 配置(php.ini)
- session.auto_start
- session.cookie_domain
- session.cookie_lifetime
- session.cookie_path
- session.name
- session.save_path
- session.use_cookies
- session.use_trans_sid
- session.gc_probability
- session.gc_divisor
- session.gc_maxlifetime
- session.save_handler
- session的优缺点传递sessionid
- 优点:信息安全
- 缺点:占用服务器的资源,分布式不方便
- 优点:信息安全
如果cookie被禁用,那么可以通过get来传递sessionid:
"xxx.php?<?php echo session_name().'='.session_id(); ?>"//通过session_name()和session_id()来拼接
"xxx.php?<?php echo SID; ?>"//SID常量在cookie开启的时候为空,在cookie被禁用的时候是session_name()和session_id()拼接的样子
-
session 的存储
session_set_save_handler()
函数可以将session存储在服务器上(mysql Memcache redis等)