让人琢磨不透的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容器不会解决这个问题,这个问题放给别的框架或者系统自行解决

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

相关文章
|
11天前
|
存储 前端开发 Java
【SpringMVC】——Cookie和Session机制
获取URL中参数@PathVarible,上传文件@RequestPart,HttpServerlet(getCookies()方法,getAttribute方法,setAttribute方法,)HttpSession(getAttribute方法),@SessionAttribute
|
2月前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
81 4
|
2月前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
3月前
|
缓存 Java Spring
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
文章比较了在Servlet和Spring Boot中获取Cookie、Session和Header的方法,并提供了相应的代码实例,展示了两种方式在实际应用中的异同。
225 3
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
|
3月前
|
存储 安全 数据安全/隐私保护
Cookie 和 Session 的区别及使用 Session 进行身份验证的方法
【10月更文挑战第12天】总之,Cookie 和 Session 各有特点,在不同的场景中发挥着不同的作用。使用 Session 进行身份验证是常见的做法,通过合理的设计和管理,可以确保用户身份的安全和可靠验证。
44 1
|
4月前
|
存储 缓存 数据处理
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
本文介绍了PHP会话控制及Web常用的预定义变量,包括`$_REQUEST`、`$_SERVER`、`$_COOKIE`和`$_SESSION`的用法和示例。涵盖了cookie的创建、使用、删除以及session的工作原理和使用,并通过图书上传的例子演示了session在实际应用中的使用。
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
|
4月前
|
存储 前端开发 Java
JavaWeb基础7——会话技术Cookie&Session
会话技术、Cookie的发送和获取、存活时间、Session钝化与活化、销毁、用户登录注册“记住我”和“验证码”案例
JavaWeb基础7——会话技术Cookie&Session
|
4月前
|
存储 安全 NoSQL
Cookie、Session、Token 解析
Cookie、Session、Token 解析
84 0
|
5月前
|
存储 JavaScript 前端开发
Cookie 反制策略详解:Cookie加解密原理、Cookie和Session机制、Cookie hook、acw_sc__v2、jsl Cookie调试、重定向Cookie
Cookie 反制策略详解:Cookie加解密原理、Cookie和Session机制、Cookie hook、acw_sc__v2、jsl Cookie调试、重定向Cookie
324 1
|
5月前
|
C# 开发者 Windows
WPF遇上Office:一场关于Word与Excel自动化操作的技术盛宴,从环境搭建到代码实战,看WPF如何玩转文档处理的那些事儿
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的重要组件,以其强大的图形界面和灵活的数据绑定功能著称。本文通过具体示例代码,介绍如何在 WPF 应用中实现 Word 和 Excel 文档的自动化操作,包括文档的读取、编辑和保存等。首先创建 WPF 项目并设计用户界面,然后在 `MainWindow.xaml.cs` 中编写逻辑代码,利用 `Microsoft.Office.Interop` 命名空间实现 Office 文档的自动化处理。文章还提供了注意事项,帮助开发者避免常见问题。
337 0