日期:2014-05-18  浏览次数:20770 次

[-望推荐-] 我对cookie及session的一点理解及疑惑,和朋友们交流

web中cookie和session应用很广,以、之前也有用过,但理解的不是很好,近日翻了些资料,可总觉资料上说的让自己有点摸不准头绪,索性自己整理下,有几点想不通,想通的地方也未必正确呵,[color=#FF6600]诚望朋友们给出正解:

我是基于一下几点来思考的(很粗,估计有很多问题):
1, web中为何要引入cookie和session
  我知道对于动态网页,有在页面之间传递参数的需求,常见的有表单传递,URL传递,引入cookie和session也是用来在页面中传递参数的吧
2, cookie,session是如何传递参数的:
  所有的变量都是在服务端产生的,我说的变量较笼统,一般指: “名称=值”
  对于cookie,服务器的某个servlet根据需要把产生的变量保存在cookie对象中,然后发给客户端的浏览器保存,当下次请求该servlet时,浏览器也会把相关的cookie信息发过来, servlet根据cookie对象的名称可以获取到其值

  对于session,同样服务器的某个servlet根据需要把产生的变量保存在session对象中, 然后返回给客户端该session的一个id(身份表示码),当下次请求时该id(session标识码)也会传递给服务器(任何一个servlet都可获取到),服务器根据该id从而可以判定是哪个用户的session

3, cookie,session保存信息的方式及技术支持等:
  cookie信息保存在“客户端”的浏览器中,具体是依txt格式存在硬盘中,它是由浏览器提供的一种机制,是对http协议的扩展 ,一个用户可分配多个cookie对象,每一个cookie存储一个“名称=值; 属性1; 属性2;。。。”
  session信息保存在“服务端”,是http协议提供的一种机制,一个用户只分配一个session对象,里面存储该用户相关的属性值 

4, cookie,session的生存期:
  cookie,其生存期从产生到给定的时间结束(时间可由用户设定),如果时间值大于0,则浏览器关闭也没影响
  session,从产生到给定的时间结束,如果用户不设置,则按默认时间,一旦超出这个时间还没登陆服务器,则session失效

5, cookie,session其它的,请朋友们补充吧,我也不是很清楚了:
  比如二者适用范围,与url传递相比有什么好处,等[/color]



------解决方案--------------------
对于在论坛中,控制页面最好用cookie,而session最好也不要频繁地应用,因为session这个东西非常占内存!
这样说吧,cookie只应用于小型地页面传递数据,并且传输少量的数据!而session虽然可以传输大量的数据,但占用内存开销非常大,所以建议能省则省!
------解决方案--------------------
在web应用中:
会话:一个客户端浏览器与web服务器之间连续发生的一系列请求响应的过程。
会话状态:web服务器与浏览器在会话过程中产生的状态信息,借助会话状态web服务器能够把属于同一会话中的一系列的请求和响应过程关联起来,使它们之间能够互相依赖和传递信息。(购物车)

在基于web的电子商务中,浏览器与web服务器的会话过程必须是有状态的,即:web服务器在处理浏览器下一个请求时,需要知道该浏览器前面所发出的一些请求的处理结果。

注意:HTTP是无状态的。
Cookie请求字段:

如果浏览器允许接受服务器发送过来的Cookie信息,它将保存这个Cookie,并在访问这个web服务器的时候,在请求头中使用cookie请求头将cookie信息回送给服务器。
由于Session对象会消耗服务器端的内存资源,所以web服务器并不会在客户端开始访问它的时候就创建它的对象,而是在request.getSession()的时候创建

创建Session对象以后,服务器会给这个对象分配一个ID,客户端只要记住这个ID号码,在后续的访问中,服务器就知道这个请求是哪个客户端发出的。

当服务器为某个客户端创建Session对象以后,在Http协议中,web服务器无法判断客户端浏览器是否还会继续访问,也无法检测客户端浏览器是否关闭,所以当浏览器关闭了以后,Session对象依然会保存在服务器的内存里。

超时限制:
如果客户端在一定的时间内,没有发出后续的请求,web服务器就认为客户端已经停止了活动,结束与当前浏览器的会话

设置session会话超时间隔:conf/web.xml中
<session-config>
<session-timeout>30</session-timeout>
</session-config>

注意:这里的单位是分钟

------解决方案--------------------
呵呵,不用加望推荐,我一般天天来论坛的,
要是好主题我会推荐的
------解决方案--------------------
楼主可以参考:一下我的这篇博客,里面有对Session和Cookie的详解

http://blog.csdn.net/yinyuan1987/archive/2008/11/17/3321213.aspx

三、理解cookie机制 
cookie机制的基本原理就如上面的例子一样简单,但是还有几个问题需要解决:“会员卡”如何分发;“会员卡”的内容;以及客户如何使用“会员卡”。 

正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。 

而cookie 的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。意思是麦当劳的会员卡只能在麦当劳的店里出示,如果某家分店还发行了自己的会员卡,那么进这家店的时候除了要出示麦当劳的会员卡,还要出示这家店的会员卡。 

只是简单摘抄一部分,具体见博客!

呵呵,希望对大家有帮助!
------解决方案--------------------
四、理解session机制 

session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。 

当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为 session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个 session id将被在本次响应中返回给客户端保存。 

保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID,而。比如weblogic对于web应用程序生成的cookie,JSESSIONID= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788