一篇文章讲解cookie与session的区别?

参考资料:https://blog.csdn.net/liluo_2951121599/article/details/79011840

session场景话:

相当于我们去商场之前存箱子,保安让我们把包存到柜子里,并给我们一个手牌,当我们要走的时候,可以拿着牌进行比对,给我们东西;

session理解为存放我们数据的 "箱子",当然,这些 "箱子"都在服务器端存着,服务器给访问者一把唯一的"手牌",这个手牌被称作session_id,访问者凭借自己的session_id,就能获取到自己存在服务器端的数据;

1、客户端第一次访问的时候,没有cookie怎么办?

HTTP请求一个页面后,如果用到开启session,回去读cookie中的PHPSESSION是否有,如果没有,则会新生成一个session_id,先存入cookie中的PHPSESSID中,在生成一个sess_前缀文件。当有写入$_SESSION的时候,就会往sess_文件里序列化吸入数据。

当读取session变量后的时候,先会读取cookie中的PHPSESSID,获取session_id,然后再去找这个sess_sessionid文件,来获取对应的数据。由于默认的PHPSESSID是临时的会话,在浏览器关闭后,会消失,所以我们重新访问的时候,会生成session_id和sess_这个文件。

2、第一次访问的时候,服务器上如何根据不同的客户端访问产生唯一的session

3、第二次访问的时候,不做判断直接运行生成session的函数还会重复生成session嘛

每次我们访问一个页面,如果有开启session,也就是有session_start() 时,就会自动生成一个session_id 来标注是这次会话的唯一ID,同时也会自动往cookie里写入一个名字为PHPSESSID的变量,它的值正是session_id,当这次会话没结束,再次访问的时候,服务器会去读取这个PHPSESSID的cookie是否有值有没过期,如果能够读取到,则继续用这个session_id,如果没有,就会新生成一个session_id,同时生成PHPSESSID这个cookie。由于默认生成的这个PHPSESSID cookie是会话,也就是说关闭浏览器就会过期掉,所以,下次重新浏览时,会重新生成一个session_id。

4、生成后的session是怎么传给客户端的,如果多个页面会生成多个PHPSESSID,那岂不是覆盖了?

服务端生成 session_id,通过 HTTP 报文发送给客户端(比如浏览器),客户端收到后按指示创建保存着 session_id 的 cookie。cookie 是以 key/value 形式保存的,看上去大概就这个样子的:

PHPSESSID=e4tqo2ajfbqqia9prm8t83b1f2

在 PHP 中,保存 session_id 的 cookie 名称默认叫作 PHPSESSID,这个名称可以通过 php.ini 中 session.name 来修改,也可以通过函数 session_name() 来修改。

5、产生session时,如何判断不同客户端生成不同的session

6、不同客户端访问的时候,服务器怎么区分是哪个客户端?

Cookie 也是由于 HTTP 无状态的特点而产生的技术。也被用于保存访问者的身份标识和一些数据。每次客户端发起 HTTP 请求时,会将 Cookie 数据加到 HTTP header 中,提交给服务端。这样服务端就可以根据 Cookie 的内容知道访问者的信息了。

7、session的默认时间周期是多少?8、cookie的默认时间周期是多少?

session_cookie_lifetime = 0 这个设置在客户端生成PHPSESSID这个cookie的过期时间,默认是0,也就是关闭浏览器就过期,下次访问,会再次生成一个session_id,所以,如果想关闭浏览器会话后,希望session信息能够保持的时间长一点,可以把这个值设置大一点,单位为秒

10、同一个浏览器,同一个页面访问A,B两网站,那么他们的cookie名称和值都是相同的,服务器怎么区分呢?

11、同一浏览器,同一个网站,cookie设置的名字一样,新生成的cookie会覆盖之前的cookie吗?

php中用来清理过期的session信息:

unset($_SESSIONS['hello']);#将sess_xxx文件中的hello变量给删除了,其他的变量该有的都保存着;
session_unset(); #销毁sess_xxx文件中的所有变量,但是这个sess_xxx文件还是保存着。

session_destroy():#直接将sess_xxx文件给删除掉

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值