cookie和session

简介: 我们对cookie的了解往往停留于浏览器的层面,但cookie其实是http协议的一部分,不管服务器端还是浏览器端都需要遵循它。cookie是由服务器第一次应答请求时生成,然后通知浏览器进行缓存,下一次提交时会把当前所有的cookie都提给浏览器,需要注意cookie并不只一个。 在浏览器端以     key=value;key=value的字符串形式存在,分号隔开的两边各位一个cook

我们对cookie的了解往往停留于浏览器的层面,但cookie其实是http协议的一部分,不管服务器端还是浏览器端都需要遵循它。cookie是由服务器第一次应答请求时生成,然后通知浏览器进行缓存,下一次提交时会把当前所有的cookie都提给浏览器,需要注意cookie并不只一个。

在浏览器端以     key=value;key=value的字符串形式存在,分号隔开的两边各位一个cookie。

cookie在浏览器端是以域名+path保存的,同域名里父path的cookie可以给子path共享。例如:

a) A.xxx.com                       cookie: domain=A.xxx.com;path="/"
b) B.xxx.com                       cookie: domain=B.xxx.com;path="/"      
c) A.xxx.com/test/cc           cookie: domain=A.xxx.com;path="/test/cc"
d) A.xxx.com/test/bb          cookie: domain=A.xxx.com;path="/test/bb"
e) A.xxx.com/test
c和d都能共享a的cookie,同样的c和d也能共享e的cookie,c和d以及b和其他cookie之间则无法共享。

cookie共享会导致一个页面存在多个path的情况,这时候浏览器不会做处理,提交到后台时由web服务器的策略做处理,一般而言会默认从最底级的路径往上,取最近的一个。

在tomcat中我们只要在context.xml的<context>标签里加上sessionCookiePath="/"就能做到cookie跨域了。这里所谓的跨域是指a.xxx.com/b和a.xxx.com/c之间cookie共享,这是因为设置这个参数后tomcat是生成cookie时会把cookie的path设成根目录,这样就能全局共享了。

我们知道session是默认会存在cookie里,其实也就是生成一个JESSIONID的cookie由浏览器缓存起来。这时候我们回过头来再想想我们所认知的session会话周期,我们被教导,浏览器页面关闭,这样session会话就丢失了。这到底对不对?

其实这是值得商榷的,如果cookie是会话级的活着禁用的,那么这是成立的。但如果cookie是会被缓存的,那就不能成立,因为下一次再打开时浏览器会检测到缓存的jsessionid cookie,并把它发给服务器,如果这时候这个jsessionid对应的session并没有被invalidate,那就还会被取出来。

所以我们通常的session失效其实是指cookie丢失,cookie丢了,所以jsessionid丢了,导致服务器端只能重新建立session。

我们可以尝试通过缓存把session持久化下来,然后把cookie的失效周期设成永久有效,这样就会看到即使服务器停掉了再开还是会得到相同的session。



目录
相关文章
|
15天前
|
存储 前端开发 Java
【SpringMVC】——Cookie和Session机制
获取URL中参数@PathVarible,上传文件@RequestPart,HttpServerlet(getCookies()方法,getAttribute方法,setAttribute方法,)HttpSession(getAttribute方法),@SessionAttribute
|
2月前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
87 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的方法,并提供了相应的代码实例,展示了两种方式在实际应用中的异同。
232 3
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
|
3月前
|
存储 安全 数据安全/隐私保护
Cookie 和 Session 的区别及使用 Session 进行身份验证的方法
【10月更文挑战第12天】总之,Cookie 和 Session 各有特点,在不同的场景中发挥着不同的作用。使用 Session 进行身份验证是常见的做法,通过合理的设计和管理,可以确保用户身份的安全和可靠验证。
50 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 解析
89 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
338 1
|
5月前
|
存储 安全 搜索推荐
【JavaWeb 秘籍】Cookie vs Session:揭秘 Web 会话管理的奥秘与实战指南!
【8月更文挑战第24天】本文以问答形式深入探讨了Web开发中关键的会话管理技术——Cookie与Session。首先解释了两者的基本概念及工作原理,随后对比分析了它们在存储位置、安全性及容量上的差异。接着,通过示例代码详细介绍了如何在JavaWeb环境中实现Cookie与Session的操作,包括创建与读取过程。最后,针对不同应用场景提供了选择使用Cookie或Session的指导建议,并提出了保障二者安全性的措施。阅读本文可帮助开发者更好地理解并应用这两种技术。
91 1