彻底理解cookie和session,不信来打我

场景描述

最近公司的管理系统老是自动掉线,而且这种情况是随机的,不是固定某个时间掉线,也不是固定次数掉线,死活找不到原因,为此特意大量查询资料以及自己的亲自实践。特此总结。
ps:框架采用的是Thinkphp5.1开发。

cookie

英文翻译小甜饼,从字面翻译看不出对于web开发有啥帮助。
淡出的说cookie就是存储在客户端浏览器里面的key-value值,从哪里可以看到呢
在这里插入图片描述
每一个key-value 都是cookie,为啥说cookie不安全呢,因为他对用户是可见的,用户可以自动修改这个值。

cookie还有以下缺点:
单条 存储量有限
浏览器存储的总条数也有限制,不同的浏览器可能默认值还不太一样。

session

session 英文翻译会话,那他和cookie有啥关系呢?
一句话:cookie中存储的某个键对应服务器上某个session文件的文件名。

可能不太容易理解:
这里以登陆后存储用户信息为例:

在讲登陆之前呢,先了解下在浏览器地址栏输入了一个地址之后发生了什么 ?cookie是如何写进来的呢?

以下图为例:
在这里插入图片描述
也就是cookie获取是服务端返回的,然后才会写入浏览器中,这就是为啥有些场景设置完了cookie需要刷新一次才能获取到值。

登陆之前:会话id存储
在这里插入图片描述
我们来看下服务器中对应的文件在哪里
在这里插入图片描述
我们来查看下内容,
在这里插入图片描述
什么东西都没有,当然我们没有进行登陆呢还。

下面登陆过后
在这里插入图片描述
存储的就是我们的登陆信息,这些信息存储的是啥,以php为例就是
$_SESSION里面存储 的所有内容。

session 有效期问题

在php的session,默认存储时间是24分钟,这里说的指的是服务器上那个sess_*文件的有效期,并且这个24分钟是距离最后一次操作的时间,并不是登陆时间,因为你每操作一次,sess文件的时间都会变成你最新的操作时间。在配置文件中由session.gc_maxlifetime = 1440来设置。过期时间=最后操作时间+有效期。
那sess——*过期了会怎样呢,直接删除么?
不不不,过期了之后,不会被立马删除,而是内容被清空,整正的删除是由操作系统自己来定期扫描,问题是php号称最好的语言,却连一个定时GC的线程都没有,靠的是有概率的回收。
在这里插入图片描述
所以又引发了一个问题,多个项目部署在同一台服务器上,如果没有设置session文件的存储位置,默认都会放在同一个目录下,如果用户量太大单个目录文件太多,引发性能问题。因此需要根据项目指定路径存储session。

Cookie有效期

cookie一旦生成之后,哪怕你操作网站,他的有效期也不会发生变化,他的有效期是你打开网站第一次生成的有效期。过期时间=创建时间+有效期。
那么session的有效期从哪里看呢
在这里插入图片描述
有人说不对呀这里没有有效期啊,这个是session级别的,就是当浏览器关闭的时候这个cookie自动失效,但是服务端对应的那个sess不一定过期哦,这一点需要注意的,如果你一个账号登陆的网站A,你把phpsessionid拷贝下来了,关闭浏览器之后,你在把这个id拷贝到浏览器,他可能会保持上一次的状态哦,不信的话,亲们可以亲自试一试。
有人说那我想也手动控制客户端的那个cookie的有效期怎么办?在哪里设置呢?
session.cookie_lifetime = 0

session存储位置

那有人会问了,原来是这样子存储session信息的,那感觉好不安全哦,其实我想说的是如果黑客都能进入你的服务器查看session了还有啥是他看不了的呢。不过既然有这个疑问,session当然可以存储在其他介质中,常见的有数据库,redis,以及其他类型的数据库。
那这个是通过 session.save_handler = files 配置的,files默认就是存储在本地文件,个人建议存储在redis里面,方便查看还有多久过期
使用redis 的ttl key 就可以查看当前会话还有多久过期。

小总结

所谓的cookie的过期时间和session的过期时间没有太必然的联系,但也不能说没有关联,其中的关系需要自己根据文章来理解。
当然session 的东西还有很多这里主要讲平时开发能遇到的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
随着互联网的发展和普及,网站和应用程序越来越多,用户也越来越多。对于这些网站和应用程序来说,如何记录用户的信息和状态是一个非常重要的问题,因为只有这样才能提供更好的服务和更好的用户体验。而cookiesession、token就是三种常用的记录用户信息和状态的方式。 首先,cookie是一种存储在客户端浏览器中的文本文件,用于存储用户的一些信息。当用户在浏览器中打开一个网站时,网站服务器会发送一个包含一些信息的cookie给用户的浏览器。浏览器在接收到cookie后会以键值对的形式将它们存储在本地,然后在下一次访问该网站时再将cookie发送给服务器。服务器通过读取这些cookie中的信息,就可以知道该用户的一些状态和偏好,从而提供更好的服务。 其次,session是一种服务器端技术,用于记录用户的会话状态。当用户第一次访问一个网站时,网站服务器会为该用户创建一个session,然后在服务器端存储用户的一些信息。当用户进行一些操作时,服务器端会根据该用户的session来判断其当前的状态和权限,并根据这些信息进行相应的处理。当用户关闭浏览器时,与该用户相关的session会被销毁。 最后,token是一种用于验证用户身份的令牌。当用户输入用户名和密码进行登录时,服务器会生成一个token,并将该token返回给客户端。客户端在后续的请求中需要带上该token,服务器收到请求后会根据token来验证用户身份,从而决定是否允许该请求。token不存储在客户端,而是存储在服务器端的数据库或者内存中,因此可以防止一些与cookie相关的安全问题,例如CSRF攻击和 XSS攻击。 总的来说,cookiesession、token可以作为不同的方式来记录用户的信息和状态,这些方式都有自己的优缺点,应该根据具体的需求来选择适合的方式。同时,为了确保安全性,应该采取一些措施来减少一些可能出现的安全问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲不住的程序员

您的打赏将是我最大的鼓励感谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值