PHP的session与cookie

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的有效时间是3600秒

cookie的有效目录

cookie的有效目录:
cookie默认在当前目录及子目录中有效
cookie一般要设置整站有效
修改域名与ip绑定的文件路径:C:\windows\System32\drivers\etc\host(修改不了,应该是权限不足)
setcookie('user','lisi',$time+255,'/');//cookie整站有效

支持子域名

场景:每个域名代码一个网站,网站之间的cookie是不可以相互访问的。
问题:百度下有多个二级域名网站,他们的cookie是要共享的,实现
setcookie('names','yuu',time()+5,'/','baidu.com');//在baidu.com下都有效

是否安全传输

安全传输就是https传输
默认情况下http和https都可以传输cookie
setcookie('na','djjd',time(),'/','baidu.com',true);//true表示只能https传输

是否安全访问

默认情况下:PHP和js都可以访问cookie
安全访问:PHP可以访问,JS不可以
setcookie('nas','djjd',time(),'/','baidu.com',false,true);//最后一个参数对CSRF有一定的防御

删除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_destroy();//销毁会话

与会话有关的配置

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值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值