`
tianhandigeng
  • 浏览: 374395 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Session、Cookie 完全理解(转载)

阅读更多

    这是J道论坛中关于Session、Cookie讨论中一个道友的理解,我觉得很好,就把它给转过来了,说实在话J道论坛中的高手是很多的,不过前几年论坛还比较火,近年不是很好了.

1、HTTP协议本身是“连接-请求-应答-关闭连接”模式的,是一种无状态协议(HTTP只是一个传输协议);
2、Cookie规范是为了给HTTP增加状态跟踪用的(如果要精确把握,建议仔细阅读一下相关的RFC),但不是唯一的手段;
3、所谓Session,指的是客户端和服务端之间的一段交互过程的状态信息(数据);这个状态如何界定,生命期有多长,这是应用本身的事情;
4、 由于B/S计算模型中计算是在服务器端完成的,客户端只有简单的显示逻辑,所以,Session数据对客户端应该是透明的不可理解的并且应该受控于服务 端;Session数据要么保存到服务端(HttpSession),要么在客户端和服务端之间传递(Cookie或url rewritting或Hidden input);
5、由于HTTP本身的无状态性,服务端无法知道客户端相继发来的请求是来自一个客户的,所以,当使用服务端HttpSession存储会话数据的时候客户端的每个请求都应该包含一个session的标识(sid, jsessionid 等等)来告诉服务端;
6、会话数据保存在服务端(如HttpSession)的好处是减少了HTTP请求的长度,提高了网络传输效率;客户端session信息存储则相反;
7、 客户端Session存储只有一个办法:cookie(url rewritting和hidden input因为无法做到持久化,不算,只能作为交换session id的方式,即a method of session tracking),而服务端做法大致也是一个道理:容器有个session管理器(如tomcat的 org.apache.catalina.session包里面的类),提供session的生命周期和持久化管理并提供访问session数据的 api;
8、使用服务端还是客户端session存储要看应用的实际情况的。一般来说不要求用户注册登录的公共服务系统(如google)采用 cookie做客户端session存储(如google的用户偏好设置),而有用户管理的系统则使用服务端存储。原因很显然:无需用户登录的系统唯一能 够标识用户的就是用户的电脑,换一台机器就不知道谁是谁了,服务端session存储根本不管用;而有用户管理的系统则可以通过用户id来管理用户个人数 据,从而提供任意复杂的个性化服务;
9、客户端和服务端的session存储在性能、安全性、跨站能力、编程方便性等方面都有一定的区别,而且优 劣并非绝对(譬如TheServerSide号称不使用HttpSession,所以性能好,这很显然:一个具有上亿的访问用户的系统,要在服务端数据库 中检索出用户的偏好信息显然是低效的,Session管理器不管用什么数据结构和算法都要耗费大量内存和CPU时间;而用cookie,则根本不用检索和 维护session数据,服务器可以做成无状态的,当然高效);

另外,经常在论坛看到或听到同事说ie关掉了,session就没了,而 且还争论的唾沫横飞,偶就感到很好玩,只能不置可否地笑笑。这里只提示一下:以Ctrl+N或Shift+点击链接方式打开的IE窗口是运行在同一个进程空 间的,cookie数据在进程空间中是共享的,而双击桌面上的ie图标打开的是一个新的进程,会话级的cookie(未明确指定生存期的cookie)在 新的IE窗口里面是无法访问到的。

 

 

分享到:
评论
1 楼 xiaojing3517 2010-12-20  
<div class="quote_title">tianhandigeng 写道</div>
<div class="quote_div">
<p><span id="body_11076472" class="tpc_content"><span style="color: #ff0000;">另外,经常在论坛看到或听到同事说ie关掉了,session就没了,而且还争论的唾沫横飞,偶就感到很好玩,只能不置可否地笑笑。</span></span> </p>
<p> </p>
</div>
<p><br>下次建议把后面的一句放到前面。如果只有一个IE进程。。。哼哼</p>

相关推荐

    flask-session-cookie-manager

    标题“flask-session-cookie-manager”指的是一个Python应用,它专门针对Flask框架,用于管理和操作session cookie。在Web开发中,session cookie是服务器用来跟踪用户状态的一种方式,特别是在无状态的HTTP协议上...

    对session和cookie的一些理解

    标题中的“对session和cookie的一些理解”提示我们,这篇内容将涉及Web开发中两种重要的用户会话管理技术:Session和Cookie。在Web应用中,Session和Cookie被广泛用于跟踪用户的登录状态、购物车信息等,确保用户在...

    flask、session、cookie解加密脚本

    在提供的`flask_session_cookie_manager3.py`和`flask_session_cookie_manager2.py`文件中,可能包含了实现这个过程的代码。这些脚本可能用来检查或调试`Flask`应用的`session`和`cookie`管理,或者用于演示如何手动...

    session 和cookie 区别

    标题与描述中的关键词“session和cookie区别”指向了两种在Web开发中常用的状态管理技术,它们各自具有独特的特性和用途。下面将详细阐述这两种技术的关键知识点: ### session和cookie的区别 **1. 定义与存储位置...

    Session Cookie的HttpOnly和secure属性

    其次,GlassFish2.x支持的是servlet2.5,而servlet2.5不支持Session Cookie的"HttpOnly"属性。不过使用Filter做一定的处理可以简单的实现HttpOnly属性。GlashFish3.0(支持servlet3.0)默认开启Session Cookie的...

    flask-session-cookie-manager-master.zip

    首先,我们来深入理解session和cookie的概念。在Web应用中,用户认证通常依赖于session和cookie。cookie是服务器发送到用户浏览器并存储在本地的一小块数据,用于跟踪用户状态。而session则是一种在服务器端存储用户...

    经典收藏Cookie和Session

    通过以上内容,我们可以清楚地了解到Cookie与Session的基本概念及其区别,同时对于会话Cookie与持久Cookie的不同也有了更深入的理解。在实际应用中,合理选择和使用这两种机制可以帮助开发者更好地管理用户的会话...

    session与cookie的区别和联系?

    ### Session与Cookie的区别和联系 #### 一、概念解析 - **Cookie**:Cookie是一种小型的数据文件,由服务器端生成并发送给用户浏览器,浏览器在本地(如用户的硬盘)保存该文件,然后每一次请求同一网站时都会把该...

    深入理解session,cookie

    在这个场景下,Cookie和Session成为了关键的角色。接下来,我们将深入探讨这两种技术的工作原理及其在Servlet和JSP中的应用。 首先,我们来看Cookie。Cookie是由服务器端创建并在HTTP响应头中发送到客户端(通常是...

    SpringSession同时支持Cookie和header策略

    本文将深入探讨SpringSession如何支持Cookie和header策略,并解析`CookieHeaderHttpSessionStrategy.java`这个文件中的关键概念和技术细节。 首先,我们来看标题提及的“SpringSession同时支持Cookie和header策略”...

    cookie和session示例

    总结,Cookie和Session都是Web开发中不可或缺的部分,理解它们的工作机制并合理使用,有助于构建更高效、安全的Web应用。在实际项目中,往往结合使用两者,例如,将Session ID通过Cookie发送,实现会话跟踪。学习和...

    一次搞明白 Session、Cookie、Token,面试问题全搞定.pdf

    Cookie通过设置有效期来区分Session Cookie和Persistent Cookie。Session Cookie在用户会话结束后就失效,而Persistent Cookie则可以设置一个具体的过期时间。此外,Cookie还具有Secure属性和HttpOnly属性,Secure...

    JAVA之cookie与session

    ### JAVA之cookie与session #### 一、Cookie与Session的概念 **Cookie** 与 **Session** 是两种在 Web 开发中用于跟踪用户会话的重要技术。它们的主要目标是在客户端和服务端之间保持状态。 - **Cookie** 机制...

    Cookie、Session和Token三者的区别及使用

    ### Cookie、Session与Token的区别及使用详解 #### 一、Cookie **定义**: Cookie是一种用于在客户端保持状态的方案。简单来说,当你访问一个网站时,该网站可能会在你的计算机上留下一些信息(如用户名、密码等),...

    c#实现cookie和session的登陆实例

    首先,我们要理解Cookie和Session的基本概念。Cookie是一种小型文本文件,由服务器发送到用户的浏览器,并存储在本地。每次用户访问同一网站时,浏览器会自动将Cookie发送回服务器,从而让服务器识别用户。Session则...

    对session和cookie的深刻理解

    ### 对Session和Cookie的深刻理解 #### Session与Cookie的基本概念 在Web开发中,了解Session和Cookie是非常重要的,因为它们是实现用户会话管理和状态跟踪的关键技术。简单来说,Session和Cookie都用于存储用户...

    TP5 Session和Cookie

    标题中的“TP5 Session和Cookie”指的是在PHP的ThinkPHP5框架中关于用户会话管理和Web身份验证的两个核心概念。...理解并熟练运用Session和Cookie,对于提升ThinkPHP5项目的安全性和用户体验至关重要。

    Cookie,Session,Application的区别与应用

    ### Cookie、Session、Application 的区别与应用 在 ASP.NET 中,为了存储用户的状态信息或临时数据,开发人员经常使用多种内置的对象,例如 Application、Session、Cookie、ViewState 和 Cache 等。这些对象各有...

    java Session cookie

    Java Session Cookie是Web开发中重要的用户状态管理工具,理解其工作原理和使用方法对于优化应用性能和提高用户体验至关重要。在实际开发中,需要根据项目需求权衡Cookie和Session的使用,合理设计和管理Session ...

    session cookie asp.net

    ASP.NET中的Session和Cookie是两种常见的用户状态管理技术。在Web应用中,由于HTTP协议的无状态特性,服务器无法直接识别连续的请求来自同一个用户,因此需要借助这些机制来跟踪用户的状态。 Session和Cookie的主要...

Global site tag (gtag.js) - Google Analytics