论坛首页 Java企业应用论坛

Session、Cookie 完全理解(转载)

浏览 18126 次
精华帖 (1) :: 良好帖 (9) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-12-20   最后修改:2010-12-20

    这是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窗口里面是无法访问到的。

 

 

   发表时间:2010-12-20  
tianhandigeng 写道

另外,经常在论坛看到或听到同事说ie关掉了,session就没了,而且还争论的唾沫横飞,偶就感到很好玩,只能不置可否地笑笑。 

 


下次建议把后面的一句放到前面。如果只有一个IE进程。。。哼哼

0 请登录后投票
   发表时间:2010-12-20  
讲的基本都对,ie的进程context上下文之间共享session信息。
“同一个进程空间的”这句话是有问题的,如果明明两个iexplore.exe,为什么说同一个进程空间?但是ctrl+n的确是共享了session信息。

另外jdon我个人感觉,不是技术问题导致没落,而是思想问题,jdon的带头大哥人太矫情,什么事儿都得道一道,真要命。
其实你就是个搞技术的,技术工种,性质上和木匠还是厨师没啥两样,没见过哪个木匠和厨子这么矫情的@@
0 请登录后投票
   发表时间:2010-12-20  
xiaojing3517 写道
<div class="quote_title">tianhandigeng 写道</div>
<div class="quote_div">
<span id="body_11076472" class="tpc_content"><span style="color: #ff0000;">另外,经常在论坛看到或听到同事说ie关掉了,session就没了,而且还争论的唾沫横飞,偶就感到很好玩,只能不置可否地笑笑。</span></span> 

 

</div>
<br>下次建议把后面的一句放到前面。如果只有一个IE进程。。。哼哼

呵呵 不是我写的 是转载的 我也在努力理解啊
0 请登录后投票
   发表时间:2010-12-20  
flashing 写道
讲的基本都对,ie的进程context上下文之间共享session信息。
“同一个进程空间的”这句话是有问题的,如果明明两个iexplore.exe,为什么说同一个进程空间?但是ctrl+n的确是共享了session信息。

另外jdon我个人感觉,不是技术问题导致没落,而是思想问题,jdon的带头大哥人太矫情,什么事儿都得道一道,真要命。
其实你就是个搞技术的,技术工种,性质上和木匠还是厨师没啥两样,没见过哪个木匠和厨子这么矫情的@@

同感,这位带头大哥势忒大,无论他说的对错,都毋庸置疑,他就是天,他就地,他不可侵犯,而且还带着很多个人偏见与无知!!!
0 请登录后投票
   发表时间:2010-12-20  
tianhandigeng 写道

另外,经常在论坛看到或听到同事说ie关掉了,session就没了,而 且还争论的唾沫横飞,偶就感到很好玩,只能不置可否地笑笑。

 

session 在服务器端得嘛,关IE鸟事啊。。。。

0 请登录后投票
   发表时间:2010-12-20  
bill2004158 写道
tianhandigeng 写道

另外,经常在论坛看到或听到同事说ie关掉了,session就没了,而 且还争论的唾沫横飞,偶就感到很好玩,只能不置可否地笑笑。

 

session 在服务器端得嘛,关IE鸟事啊。。。。

楼主说的应该是在讨论session的客户端(IE,firefox,chrome,甚至自己写的一个支持http的小程序)支持,看楼主的内容水平应该这个(session 在服务器端得嘛,关IE鸟事啊)道理

0 请登录后投票
   发表时间:2010-12-20  
以前一直误认为ie关闭,session就关闭了。根本不知道还有客户端和服务器端区别,都只认为是服务器端。。。学习了。
0 请登录后投票
   发表时间:2010-12-20  
说白了web这么多年,还是这些基础,要好好理解
0 请登录后投票
   发表时间:2010-12-20  
mlw2000 写道
bill2004158 写道
tianhandigeng 写道

另外,经常在论坛看到或听到同事说ie关掉了,session就没了,而且还争论的唾沫横飞,偶就感到很好玩,只能不置可否地笑笑。

 

session 在服务器端得嘛,关IE鸟事啊。。。。

楼主说的应该是在讨论session的客户端(IE,firefox,chrome,甚至自己写的一个支持http的小程序)支持,看楼主的内容水平应该这个(session 在服务器端得嘛,关IE鸟事啊)道理


实在很好奇什么叫做session的客户端,就像楼主说的,session要不就是在传输过程中,要不就是在服务器上存储,session的客户端,天,我理解不了了!个人理解的cooke应该是用户电脑本机带上了服务器端存储的session的id值!拿出来对应,然后可以取得相应数据!实在很想弄明白session的客户端是个什么东东

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics