`

解读Cookie和Session之间的区别与联系

阅读更多

解读Cookie和Session之间的区别与联系

1、为什么要使用 Cookie 和 Session

 

由于 Http 协议的请求过程,是基于 TCP/IP 的,当客户端请求服务器,服务器处理后,进行响应,这个过程是无状态的。在有些时候,是需要保存一些客户端的请求信息,识别客户端的某些状态,智能的、有针对性的去分析某些客户端的习惯。这些时候,就需要去记录客户端的连接状态,识别请求的状态等。为了解决类似的事情,就需要使用到了 Cookie 和 Session。

 

2、Cookie 和 Session 的具体知识

 

(1)Cookie:在客户端访问某个地址时,会将请求交到服务器进行处理,在发送请求的时候,浏览器会将页面的头部信息一并的交到服务器端进行处理。在处理的过程中,Cookie 在服务器端生成 ,在此同时,可以将一些需要保存的信息,存放到此 Cookie 中。生成 Cookie 对象时,需要确定具体的名称及具体的值,可以设置当前 Cookie 的过期时间,设置过期时间后,就相当于持久化了 Cookie 中的数据,此时的 Cookie 会以之前的 Cookie 名称,保存在客户端。

 

如果不设置过期时间,则当前 Cookie 的生命期是浏览器会话期间,一旦关闭了该浏览器,当前的Cookie 就会不存在了,此时的 Cookie 信息是保存在内存中。在服务器端,处理完后,会将生成的 Cookie ,随着 Http 响应,会在 Http 响应头中,加上Cookie 信息,浏览器接受到响应后,会按照 Http 响应头里的 Cookie ,在客户端建立 Cookie 。在下次客户进行请求的时候,Http 会附带着已经存储过的 Cookie,一并发送到服务器。一个域,在客户端建立的所以 Cookie 都是可以共享的,只要 Cookie 没有过期。

 

cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式

 

(2)Session:Session 是在服务器端生成的,存储在服务器端,即存在内存中。可以对生成的 Session 设置过期时间,如果不设置过期时间,默认的 Session 过期时间是30 分钟(在不同的服务器中,它的过期时间略有不同,本文是以 Tomcat 来说的)但是,Sesssion 的生成的同时,会生成一个与之相关联的的 SessionID ,此 SessionID的存储是需要 Cookie 来完成的。 SessionID 是以名称为 JSESSIONID,其值应该是一个既不会重复,又不容易被找到规律以仿造的字符串。SessionID会随着此次 Http 响应,一并返回到客户端,并保存在客户端中。到当前请求再次发出后,该 SessionID会随着 Http 头部,传到服务器中,服务器依据当前 SessionID 得到与之对应的 Session.

 

 当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。一般这个cookie的名字都是类似于SEEESIONID。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。

 

其中:通过 Cookie 的方式存储 Session 状态,只是其中一种方式。如果客户端禁用了 Cookie 的话,很多网站任然可以存储用户的信息。一种处理的方式是URL 重写,将 SesseionID 直接附加在请求地址的后面。另一种处理的方式是,使用隐藏自动的方式。就是服务器自动的在表单中,添加一个隐藏字段,以便在表单提交时,将 SesseionID 一起传到服务器,进行识别。

 

Cookie 和 Session 的区别

 

首先,Cookie 是存储在客户端的,Session 是存储在服务器端的。

 

其次,在保存相对安全性低的信息时候,可以考虑使用 Cookie,在相对安全性要求高的信息时候,可以考试使用 Session。毕竟 Cookie 存在客户端,其他人可以查找并分析的。

 

最后,在对性能要求高的时候,不适合使用 Session 的,因为 Session 会一直存在服务器的,直到当前 Session 过期,而且 Cookie 存储是字符串类型的信息,而 Session 可以存储任何形式的信息,Session 也不存在访问域的限制。

 

在存储相对持久的信息时,应考虑使用 Cookie,因为 Cookie 可以以文件的形式,存储在客户端。在进行一些登录的验证及信息拦截的时候,可以使用 Session。

 

单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

分享到:
评论

相关推荐

    Cookie,Session,Token详解.pdf

    根据提供的文件信息,以下是对文件《Cookie,Session,Token详解.pdf》中知识点的详细解读: 1. Cookie的相关知识 1.1 Cookie不是缓存。它是由服务器创建并存储在客户端的一小段文本信息,通常以字典(键值对)的...

    获取SessionID

    ### 获取SessionID方法详解 在Web开发中,Session是一种常用的技术,...在实际开发中,开发者应根据项目需求选择合适的获取SessionID的方式,同时注意Session的安全性和有效性管理,确保用户数据的安全和隐私保护。

    cookie实例

    6. **Session与Cookie的区别**:虽然Cookie常用于实现自动登录,但与Session相比,它存在安全性、存储容量和生命周期的限制。Session存储在服务器端,更安全,但消耗更多服务器资源。 7. **最佳实践**:设置合理的...

    解读ASP.NET 5 & MVC6系列教程(8):Session与Caching

    为了简化不同类型值与byte[]之间的转换,微软在Microsoft.AspNet.Http命名空间中提供了扩展方法,使得开发者能够以更为直观的方式对byte[]、int和string等类型的数据进行Session的读写操作。 以bool类型为例,可以...

    文思海辉java程序员面试题.pdf,这是一份不错的文件

    Cookie 和 Session 的主要区别在于存储位置和生命周期。Cookie 存储在客户端的浏览器中,生命周期可以根据需要设置,例如可以设置为一个 session 或者一个时间段。Session 存储在服务器端,生命周期通常为一个 ...

    Django中的session用法详解

    4. **加密CookieSession**:Session数据直接存储在加密的Cookie中,减少服务器存储负担,但数据量有限制。 除了存储引擎的选择,还可以配置其他参数,如`SESSION_SAVE_EVERY_REQUEST`来决定是否每次请求都保存...

    php session劫持和防范的方法

    5. **限制Session cookie的域和路径**:设置Session cookie的`domain`和`path`属性,限制其作用范围,减少被跨站脚本攻击(XSS)利用的可能性。 6. **禁用Session ID预测**:使用PHP默认的随机Session ID生成器,...

    ;session.save_path = CDOCUME~1ADMINI~1LOCALS~1Temp

    在软件开发过程中,通过Mantis BTS可以帮助团队更有效地组织和跟踪缺陷报告,提高开发效率和质量。 #### 配置问题 在描述中提到的错误信息主要涉及到Mantis BTS的配置问题,具体来说是关于`session.save_path`的...

    基于ASP的身份证批量解读与验证查询系统 v3.3.zip

    7. **状态管理**:对于查询结果的显示和用户操作的跟踪,可能需要用到session或cookie来管理用户会话状态。 8. **性能优化**:批量处理可能导致服务器负载增加,因此可能需要考虑数据库查询优化、缓存策略、代码...

    PHP session会话的安全性分析

    - 监控和记录session相关的日志,以便及时发现并处理异常行为。 了解和实施这些安全措施,能显著提升PHP应用的session安全性,降低被攻击的可能性。在实际开发中,应结合具体项目需求,选择合适的安全策略,并不断...

    Python网络爬虫技术 第2章 网页前端基础 教案.docx

    - **理解Cookie机制**:了解Cookie在客户端与服务器之间如何传递信息,以及其在保持会话状态中的作用。 #### 四、案例分析 ##### 1. 引导性提问解析 - **网页数据为什么可以被爬取?**:网页是通过HTML、CSS和...

    acegi源码解读.txtacegi源码解读.txtacegi源码解读.txt

    该过滤器主要负责维护HTTP Session和Security Context之间的关联。当一个新请求到来时,它会检查是否存在有效的Security Context。如果没有,`chain.doFilter`方法会被调用,同时清除当前的Security Context。 ####...

    南方数据新闻发布管理系统-CSDN下载

    4. **混淆和加密**:对敏感的Cookie内容进行混淆或加密,增加攻击者解读的难度。 5. **更新和修补**:及时更新系统和应用程序,修复已知的安全漏洞。 【南方数据新闻发布管理系统 V7.0.zip】文件可能包含了该系统的...

    网站登录持久化Cookie方案

    网站登录持久化Cookie方案涉及的技术知识点主要包括Cookie的持久化管理、安全性考虑以及与服务器端的数据交互。当用户在登录页面选择“记住我”的选项时,系统会生成一个持久化Cookie保存至用户的浏览器,这样用户在...

    java面试复习大纲

    7. Cookie和Session:了解Cookie和Session的概念、生命周期,以及如何管理用户的会话。 五大框架: 1. Struts2:掌握Struts2的Action配置和使用、值栈操作、与Spring MVC的比较、拦截器和过滤器的区别及工作原理。 ...

    app-tests-0.7.3.zip

    开发者只需在Web应用的初始化阶段配置SCS-Lib,并将其与现有的会话管理框架(如Spring Session)集成,就可以享受到安全的cookie会话管理服务。其API设计简洁明了,使得开发者能够快速理解和使用。 SCS-Lib的源代码...

Global site tag (gtag.js) - Google Analytics