首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

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

2011-12-10 
[-望推荐-] 我对cookie及session的一点理解及疑惑,和朋友们交流web中cookie和session应用很广,以、之前也有

[-望推荐-] 我对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!-145788764,它的名字就是 JSESSIONID。 



由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,表现形式为http://...../xxx;jsessionid= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764 
另一种是作为查询字符串附加在URL后面,表现形式为http://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764 
这两种方式对于用户来说是没有区别的,只是服务器在解析的时候处理的方式不同,采用第一种方式也有利于把session id的信息和正常程序参数区分开来。 
为了在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个session id。 


详细见博客
http://blog.csdn.net/yinyuan1987/archive/2008/11/17/3321213.aspx
[解决办法]
1, web中为何要引入cookie和session 
cookie和session说白了确实是用来传递保存参数的,但是他们有更重要的作用。常用的参数传递方法就是使用POST,GET方法,但是我们总不能将登录信息,验证票据使用POST,GET方法传来传去吧,这些信息是在会话过程中始终都要用到的,所有引入了SESSION,用户保存会话过程中所需要的参数,而cookie就是一种“持久化”,保存在客户端的,每次请求都要将cookie传输过去,而不需要手动添加。前提是COOKIE可用。没有禁用。

2, cookie,session是如何传递参数的: 
COokie和session都是键值对,cookie保存在客户端,而session在会话过程中都保存在内存中,内存中的数据可以直接读取,而cookie是通过http传递到服务器来进行传递的。

[解决办法]
session是实时状态对象。cookies是它的持久化方式。
[解决办法]

探讨
在web应用中:
会话:一个客户端浏览器与web服务器之间连续发生的一系列请求响应的过程。
会话状态:web服务器与浏览器在会话过程中产生的状态信息,借助会话状态web服务器能够把属于同一会话中的一系列的请求和响应过程关联起来,使它们之间能够互相依赖和传递信息。(购物车)

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

[解决办法]
session应该是保存在服务器、而cooki保持在客户端的。
[解决办法]
Session是房子,Cookie是砖头。

盖房子可以用砖头,也可以不用砖头;当然,砖头不仅仅可以用来盖房子,还有许多其它用处。

房子和砖头之间没有必然的联系。




[解决办法]
让我们用几个例子来描述一下cookie和session机制之间的区别与联系。笔者曾经常去的一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠,然而一次性消费5杯咖啡的机会微乎其微,这时就需要某种方式来纪录某位顾客的消费数量。想象一下其实也无外乎下面的几种方案: 
1、该店的店员很厉害,能记住每位顾客的消费数量,只要顾客一走进咖啡店,店员就知道该怎么对待了。这种做法就是协议本身支持状态。 
2、发给顾客一张卡片,上面记录着消费的数量,一般还有个有效期限。每次消费时,如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来。这种做法就是在客户端保持状态。 
3、发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次消费时,如果顾客出示该卡片,则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种做法就是在服务器端保持状态。

热点排行