让人琢磨不透的Session和Cookie

简介: web开发这么长时间了,session,cookie ,一直没有深入的理解,理论知识

Session与Cookie


由于http协议是无状态的协议,为了能够记住请求的状态,于是引入了SessionCookie的机制。我们应该有一个很明确的概念,那就是Session是存在于服务器端的,在单体式应用中,他是由Web容器(例如:tomcat)管理的,存在于容器的内存中,而Cookie则是存在于客户端,更方便理解的说法,可以说存在于浏览器。Cookie并不常用,至少在企业或者互联网开发中,并没有什么场景需要我们过多的关注Cookiehttp协议允许从服务器返回Response时携带一些Cookie,并且同一个域下对Cookie的数量有所限制,Session的持久化依赖于服务端的策略,而Cookie的持久化则是依赖于本地文件。虽然说Cookie并不常用,但是有一类特殊的Cookie却是我们需要额外关注的,那便是与Session相关的sessionId,他是真正维系客户端和服务端的桥梁。


Cookie的分类


按照存储的物理介质区分,一类是在web容器的,一类是存储在硬盘的


拿tomcat来说,

1、当请求到达,tomcat会创建request和response

2、session的创建始于request.getSession(true);这里可以传false,即不创建新的

3、创建session的伪代码:


6.png

这里create即传入的参数,false直接返回,如果是true的话


7.png

当session创建成功后,直接往response里追加sessioncookie,

8.png

这里追加的cookie,maxAge是通过


9.png

设置的,默认没有时长,就是存储在浏览器内存的cookie,当窗口关闭后cookie就失效,这就是解释了在访问web容器的时候,cookie是什么时候生成的,对于tomcat来说,默认生成的是如下图所示的Cookie

10.png

下面对web容器请求两次,都是http://localhost:8080/cookie

第一次:


11.png

首先容器生成session,往response里addHeader一个Set-Cookie,返会客户端

第二次请求


13.png

这个时候,浏览器内存已经得到第一次响应的Cookie,直接请求的时候,在request里面就带上cookie

14.png

1因为参数中有HttpSession,所以会执行request.getSession(true);当然,直接在请求方法里之心这句也行


那么,对于存储在客户端的本地的cookie怎么设置呢,一样


15.png

这样的话,客户端本地就会持久化一个key=value的cookie,后续,在非失效的情况下,即使关掉窗口,请求时也会带有该cookie


修改后第一次请求


16.png

第二次

17.png

关掉浏览器窗口后,在次请求


18.png

那么,本来客户端如果禁用session怎么办,禁用的只是本地存储的session,上述例子就是key=value,对于内存的cookie不会影响,这就是web下的session-cookie机制


题外话:用户登录后,大多web容器是判断是否有session来判断用户,这就导致登录之前和之后的session不变的情况,这属于系统漏洞,web容器不会解决这个问题,这个问题放给别的框架或者系统自行解决

声明:本文为 脚本之家专栏作者 投稿,未经允许请勿转载。

相关文章
|
1月前
|
存储 自然语言处理 API
Session、cookie、token有什么区别?
Session、cookie、token有什么区别?
23 1
|
2月前
|
存储 开发框架 NoSQL
ASP.NET WEB——项目中Cookie与Session的用法
ASP.NET WEB——项目中Cookie与Session的用法
29 0
|
2月前
|
存储 安全 API
Cookie,Session和Token
Cookie,Session和Token
|
1天前
|
存储 JSON 安全
|
1月前
|
数据采集 存储 安全
登录态数据抓取:Python爬虫携带Cookie与Session的应用技巧
登录态数据抓取:Python爬虫携带Cookie与Session的应用技巧
|
1月前
|
存储 安全 搜索推荐
Django中Cookie和Session的使用
Django中Cookie和Session的使用
21 0
|
1月前
|
存储 安全 对象存储
Cookie和Session的区别:从原理到应用
【2月更文挑战第18天】
53 6
|
1月前
|
存储 搜索推荐 安全
【Web开发】cookie和session
【Web开发】cookie和session
|
2月前
|
存储 搜索推荐 安全
Java Web开发中的会话管理:Cookie与Session对比
Java Web开发中的会话管理:Cookie与Session对比
|
2月前
|
存储 前端开发 Java
【JavaEE进阶】 获取Cookie和Session
【JavaEE进阶】 获取Cookie和Session