Cookie与Session

21 篇文章 0 订阅

 作者主页:paper jie_博客

本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。

本文于《JavaEE》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将基础知识一网打尽,希望可以帮到读者们哦。

其他专栏:《MySQL》《C语言》《javaSE》《数据结构》等

内容分享:本期将会分享Cookie与Session知识 

目录

引入

什么是Cookie

Cookie的存活时间

Cookie是怎么获得的

Session

什么是Session

 Session的使用流程

​编辑

Session的生命周期

Cookie与Session的区别


引入

我们知道,HTTP请求它是属于无状态的,每次通信连接都是没有联系的.但是在实际开发中,很多时候都是需要知道请求之间的联系关系的,就比如账号登入后,第二次访问服务器就可以知道该请求是否登入过.这里就引入我们的Cookie和Session. 

什么是Cookie

Cookie就是一个普通的本地文本文件,它里面的保存了一些数据.这些数据都是服务器端返回给客户端的.这些数据就是网站为了识别出不同的客户端身份,存储在用户端本地的数据.里面最关键的就是name/value值, name就是cookie的名称.而value里面就存储了令牌.这个令牌里面就会有用来标识用户信息的一个唯一字符串. 服务器就是通过这里令牌来识别用户.

Cookie的存活时间

Cookie是有存活时间的,它默认是存放在游览器的内存中,也就是当游览器关闭的时候,Cookie就过期了.游览器内存中存放的Cookie都是一些临时会话或者不需要长久保存的信息,

不过还有存放在硬盘上的Cookie,它们的存活时间就比较长久,就算游览器关闭了它们也会存在,直到过期或者被用户手动销毁.硬盘上存放的Cookie一般都是一些需要长久保存的信息,比如用户的首选项和登入状态.

Cookie是怎么获得的

在客户端发起请求的时候,服务器就会在它那里寻找有没有这个客户端对应的信息.如果没有它就会返回一个令牌,它就是客户端的身份标识.再下一次访问时,请求中就会带着这个令牌.服务器拿到令牌后就知道这个客户端是谁. 

这里就好比登入操作: 第一次登入输入用户密码,响应那边就会返回一个令牌给客户端.再下一次访问,或者跳转到其他页面时,请求就会携带这个令牌.服务器看到这里令牌后就会直接跳转,而不用再登入了.(只不过这里令牌是有时间限制的)

(医院挂号就诊)

1. 看病之前先挂号.挂号时候需要提供⾝份证号,同时得到了⼀张"就诊卡",这个就诊卡就相当于患者的"令牌".
2. 后续去各个科室进⾏检查,诊断,开药等操作,都不必再出⽰⾝份证了,只要凭就诊卡即可识别出当
前患者的⾝份.
3. 看完病了之后,不想要就诊卡了,就可以注销这个卡.此时患者的⾝份和就诊卡的关联就销毁了.(类
似于⽹站的注销操作)
4. ⼜来看病,可以办⼀张新的就诊卡,此时就得到了⼀个新的"令牌"

Session

之前我们在Cookie中提到的令牌,在服务器这边,就需要记录令牌信息,以及令牌的对应信息,这就是session的工作.

什么是Session

我们服务器在一个时间收到的请求是很多的,服务器就需要区分出每个请求是属于哪个用户,会在服务器这边记录下每个用户信息和会话的一些内容. Session就是服务器为了保存用户信息创建的一个特殊对象.

它本质上就是一个哈希表,里面存放了一些键值对. Key就是SessionID, Value就是用户信息. SesionId是服务器生成的一个唯一字符串. 我们可以把这个sessionid理解为Cookie中提到的令牌. 只不过令牌还会携带一些其他信息,比如时间,签名等.

 Session的使用流程

1. 当用户第一次登录时,服务器会在session中创建一个新的记录,然后将sessionid通过响应中的set-cookie返回给客户端.

2. 客户端再给服务器发送请求时,就会携带上这个sessionid(它是存放在cookie中的),也就是把cookie字段带上.

3. 服务器再收到请求后,就会根据请求中的sessionid在session中查找对应的用户信息,在进行后续的操作.如果查找不到,就会重新创建一个session,将sessionid返回.

Session的生命周期

session默认是存储在服务器的内存中,也就是说只要服务器重启了,session也就是销毁了. 不过要是这个session要是长时间没有被使用,服务器就会将它清除了,这个失效时间在Tomcat中的session默认是20分钟(这里是从session不被使用开始计算)

Cookie与Session的区别

1. Cookie是存储在客户端的,他是客户端保存用户信息的一种机制. 而Session是存储在服务器端的,它是服务器保存用户信息的一种机制.

2. Cookie和Session之间主要是靠Sessionid关联起来的.

3. Cookie和Session会经常配合在一起使用,但是不是必须配合. 比如我们可以用cookie来在客户端存储一些信息,它可以不是用户信息和Sessionid. 而且Session中的Session也不是必须通过Cookie和Set-cookie来传递,也可以通过Uer来传递,可以将Sessionid放在Uer中.

4. Session相对于Cookie是更安全的.因为Session是存在在服务器端,不太容易被修改.而Cookie是可以在客户端被修改的,也就是Cookie可以进行伪造.

5. Session的存储容量很大,因为它存放在服务器上,理论上是没有容量上限的.但是Cookie存放在客户端,每个域名下的Cooki的容量是有限制的,最大为4kb.

6. 保存在游览器内存上Cookie在游览器关闭就会销毁.而保存在服务器内存中的Session在服务器关闭也会销毁.它们都可以设置过期时间.

  • 46
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 23
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

paper jie

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值