Session与Cookie
场景
1. 客服端向服务器发送请求
2. 服务器将值放到响应头中发送至客服端
3. 浏览器自动将信息放到请求头中带到服务器
4. 服务器从请求头中获取带来的信息
Cookie
A页面中的变量如何被B页面访问:
1. 包含文件
2. get或post提交
3. cookie,cookie就是保存在客服端的信息文件
通过header、setcookie()来操作响应头
语法格式:header(键:值)
setcookie()作用:将值放到响应头中发送到客服端,并保存到客服端
设置cookie:setcookie('name','tom');//将name=tom放到响应头中
客服端有cookie后,每次请求服务器,cookie的信息都会自动的放到请求头中带到服务器
获取cookie:echo $_COOKIE['name'];
注意:
1. 关闭浏览器后,cookie消失,这种cookie称为临时cookie
2. cookie的信息不可以在不同的浏览器中共享,不可以跨浏览器
示例
setcookie('name','tom');
echo $_COOKIE['name'];
原因
第一次访问请求头中没有cookie的值,所以获取不到,第二次访问由于第一次已经设置了将cookie
设置到响应头中,第二次访问就会自动将cookie的信息放到请求头中,所以第二次访问就有显示
持久性cookie
说明:关闭浏览器后cookie的值不消失
应用场景:记住密码
语法:给cookie添加过期时间就形成了永久性cookie,过期时间是时间戳
$time = time()+3600;
setcookie('user','zhangsan',$time);
cookie的有效目录
cookie的有效目录:
cookie默认在当前目录及子目录中有效
cookie一般要设置整站有效
修改域名与ip绑定的文件路径:C:\windows\System32\drivers\etc\host(修改不了,应该是权限不足)
setcookie('user','lisi',$time+255,'/');
支持子域名
场景:每个域名代码一个网站,网站之间的cookie是不可以相互访问的。
问题:百度下有多个二级域名网站,他们的cookie是要共享的,实现
setcookie('names','yuu',time()+5,'/','baidu.com');
是否安全传输
安全传输就是https传输
默认情况下http和https都可以传输cookie
setcookie('na','djjd',time(),'/','baidu.com',true);
是否安全访问
默认情况下:PHP和js都可以访问cookie
安全访问:PHP可以访问,JS不可以
setcookie('nas','djjd',time(),'/','baidu.com',false,true);
删除cookie的三种方式
注意:cookie只能保存数字和字符串
setcookie('names',false);
setcookie('na');
setcookie('user','lisi',time()-1);
cookie的缺点
1. 因为在浏览器可以看到cookie的值所以安全性低
2. 因为只能保存字符串和数字,所以可控性差
3. 因为数据在请求中传输,增加了请求时候的数据负载
4. 因为数据存储在浏览器中,但浏览器存储空间是有限制的,一般4K
Session会话
原理
1. session是服务器端的技术
2. session是基于cookie技术的
知识点:第一次访问,服务器给客服分配一个空间,每个空间都有一个唯一编号。二:服务端将编号放到响应头带回客服端,保存在cookie中(自己只能访问自己的cookie
session操作
1. 默认情况下,会话不会自动开启,通过session_start()开启
2. 通过session_id()获取会话的编号
3. 通过$_SESSION操作会话
4. 会话可以保存除了资源以外的所有类型
5. 重复开启会话会报错
session_start()
作用:没有会话空间就创建一个会话空间,有会话空间就打开会话空间
session_start();
@session_start();
$_SESSION['name']='toms';
$_SESSION['age']=20;
echo $_SESSION['name'],'<br>';
echo $_SESSION['age'],'<br>';
echo '会话编号:'.session_id();
与会话有关的配置
session.save_path="F:\WAP\DJJ" session保存的地址
session.auto_start = 1 session自动开启,默认不自动开启
session.save_handler=files 会话以文件的形式保存
session.gc_maxlifetime=1440 会话的生命周期是1440秒
session.name=PHPSESSID 会话名
session.cookie_lifetime=0 会话编号的过期时间
session.cookie_path=/ 会话编号整站有效
session.cookie_domain = 会话编号在当前域名下有效
销毁会话
通过session_destory()销毁会话,销毁会话就是删除自己的会话文件
垃圾回收
1. 会话文件超过了生命周期是垃圾文件
2. php自动进行垃圾回收
3. 垃圾回收的概率是1/1000(访问1000次回收一次垃圾),可以设置:
session.gc_probability=1
session.gc_divisor=1000
session和cookie的区别
保存的位置:cookie在客服端,session在服务端
数据的大小:cookie小(4K),session大
数据类型:cookie字符串,session除了资源以外的所有的类型
安全性:cookie不安全,session不安全
禁用cookie对session的影响
session基于cookie的,如果禁用cookie,session无法使用
知识点
默认情况下,session只依赖于cookie,session的编号只能通过cookie传输
可以设置为session不仅仅依赖于cookie
session.use_only_cookies=0 session不仅仅依赖于cookie
session.use_trans_sid = 1 允许通过其他方式传递session_id
设置后,php自动添加get和post传递session_id
session入库
session默认情况下存储到文件中,我们可以将session存储到数据库中
memory引擎的注意事项
1. memory引擎数据存储在内存中,速度快,但是重启服务后数据清空
2. memory引擎中的字段不可以是text类型
更改会话存储
1. 通过session_set_save_handler()更改存储
2. session_set_save_handler()必须在session_start()之前
3. 有6个回调函数,open,close,read,write,destory,gc
4. read必须返回字符串,其它函数返回bool值