cookie与session相关了解——参考整理

上一篇 / 下一篇  2013-05-23 15:06:27 / 个人分类:测试相关了解

cookiesession相关了解——参考整理

一、cookie机制

Cookie是客户端的存储空间,由浏览器来维持。具体来说cookie机制采用的是在客户端保持状态的方案。当你浏览某网站时,由Web服务器置于你硬盘上的一个非常小的文本文件(C:\Documents and Settings\用户名\Cookies目录下),它可以记录你的用户ID、密码、浏览过的网页、停留的时间等信息。当你在次来到该网站时,网站通过读取cookies,得知你的信息,就可以做出相应的动作,如在页面显示欢迎你的标语,或者让你不用输入ID、密码就可以直接登录等等。

Cookies文件是在无声无息中伴随浏览器进入我们本地硬盘的,当我们浏览某个站点时,该站点很可能将记录我们隐私的cookies文件保存到本地硬盘。例:当用户在某个网站注册后,就会收到一个惟一用户IDcookie。客户后来重新连接时,这个用户ID会自动返回,服务器对它进行检查,确定它是否为注册用户且选择了自动登录,从而使用户勿需给出明确的用户名和密码,就可以访问服务器上的资源。

二、会话cookie和持久cookie的区别

如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。
   
如果设置了过期时间(setMaxAge(60*60*24)),浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。(IE测试通过)

如果你创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie:存储在浏览器的内存中(服务器自动创建一个cookie并将jsessionId作为key,sessionId的值作为value发送到客户端浏览器内存中),用户退出浏览器之后被删除。如果你希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。

简而言之当应用程序创建cookie时,在设置Cookie选择项中不设置日期就可以创建临时cookie。(对于永久cookie,设置了截止日期,cookie保存在用户硬盘驱动器,直到截止日期或者用户的删除)。

三、我们如何防范阻止cookies文件泄露我们的隐私呢?实际上我们可以通过浏览器设置不容许计算机接收cookies文件即可。方法如下: 

第一步:进入系统打开IE浏览器。 

第二步:通过菜单栏中的“工具->internet选项”打开internet设置窗口。

第三步:找到“隐私”标签,将设置的滑动按钮调节到最高,这样将阻止来自所有网站的cookie,而且计算机上的现有cookie文件都将不能被网站读取。或者找到“隐私”标签,“高级”选项里也有对cookie设置。

第四步:确定后我们完成设置,任何站点都不会将cookie文件强制塞入我们的计算机。这样我们的隐私也不会再泄露了。

为防止我们的隐私泄露,你也可以删除cookies.删除Cookies的办法:

1.先打开IETT的浏览器。 

2.点击页面最上方一行中的“工具”。  

3.在拉出的菜单里用鼠标点击“internet”选项。 

4.在弹出的对话框里用鼠标点击“删除Cookies”选项。  

5.在又一个弹出的小对话框里用鼠标点击“确定”后,这个对话框就消失了。  

6.再继续点击留下的原来的对话框下方的“确定”。 

这样,就算删除完Cookies了。当然也可以找到cookie保存文件,然后删除。

 Cookies取舍我做主 根据上面的设置我们将所有的cookies文件都阻挡在计算机之外,然而在实际使用中有的站点是需要cookies文件的支持的,特别是一些论坛。如果你禁止了cookies文件的话,这些站点将无法访问。

Cookie是保存在客户端的,用户禁用了Cookie,你的Cookie自然也就没作用啦,现在的浏览器,每当咱发送一个Cookie给客户端,他就像看门狗一样给拦截住了,并询问用户是否允许Cookie进门。天,用户又不是专家,有几个人知道啥叫Cookie呀?搞不好都当病毒拒之门外了。

四、session的机制

session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存息。
但程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否包含了一个session标识-称为session id,如果已经包含一个session id则说明以前已经为此客户创建过session,服务器就按照session id把这个session检索出来使用,如果检索不到,会新建一个。即客户请求不包含session id,则为此客户创建一个session并且同时生成一个与此session相关联的session id,这个session id将在本次响应中返回给客户端保存。

五、保存session id的几种方式

A.保存session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。

B.由于cookie可以被人为的禁止,必须有其它的机制以便在cookie被禁止时仍然能够把session id传递回服务器,经常采用的一种技术叫做URL重写,就是把session id附加在URL路径的后面,附加的方式也有两种,一种是作为URL路径的附加信息,另一种是作为查询字符串附加在URL后面。网络在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个session id。如果客户端Cookie禁用,则服务器可以自动通过重写URL的方式来保存Session的值,并且这个过程对程序员透明。(IE6.0除外)

C.另一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。

六、session什么时候被创建

一个常见的误解是以为session在有客户端访问时就被创建,然而事实是直到某server端程序调用HttpServletRequest.getSession(true)这样的语句时才被创建。
注意如果JSP没有显示的使用 <% @page session="false"%>关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句 HttpSession session = HttpServletRequest.getSession(true);这也是JSP中隐含的session对象的来历。
由于session会消耗内存资源,因此,如果不打算使用session,应该在所有的JSP中关闭它。

七、session何时被删除

session在下列情况下被删除:
A
.程序调用HttpSession.invalidate()
B
.距离上一次收到客户端发送的session id时间间隔超过了session的最大有效时间
C
.服务器进程被停止
再次注意关闭浏览器只会使存储在客户端浏览器内存中的session cookie失效,不会使服务器端的session对象失效,除非此时Server端刚好session失效时间到了。

八、打开两个浏览器窗口访问应用程序会使用同一个session还是不同的session

通常session cookie是不能跨窗口使用的,当你新开了一个新的浏览器窗口进入相同页面时,系统会赋予你一个新的session id。对session来说是只认id不认人,因此不同的浏览器,不同的窗口打开方式以及不同的cookie存储方式(如会话cookie和持久cookie)都会对这个问题的答案有影响。

打个比方:我常到一家熟食店买馋嘴鸭,该店老板为了促进销售,特发布“每购满10只即可免费赠送一只”的优惠措施。除了家里有什么红白喜事要飨客之外,应该不会有人一次性购买10只烤鸭吧?所以老板得想个法子来记录顾客的消费数量:

Ⅰ、老板发给顾客一张积分卡,上面记录着消费的数量,一般还有个有效期限。每次买烤鸭时,如果顾客出示这张卡片,老板就知道这位顾客曾经光顾过小店。这种做法就是在客户端保持状态,好比是cookie技术。打开(windows系统)C:\Documents and Settings\用户名\Cookies,你会发现一些*.txt格式的小文件,这就是你浏览某些网站,它们发给你的“积分卡”(cookies)

Ⅱ、老板发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次买烤鸭时,如果顾客出示该卡片,则老板搬出店里的划名册,找到你的卡号并加1个积分。这种做法就是在服务器端保持状态。好比是session技术。

cookiesession最大的区别在于:cookie是把积分卡发给顾客,上面记录了顾客所有的消费信息。Session则是把只有卡号(session id)的积分卡发给顾客,自家记录了顾客所有的消费信息。Cookie是保存在客户端的;session是保存在服务器端,而session id则是保存在客户端,通常也是一个cookie小文件,由于这个小文件除了session id(好比卡号)外什么也没有,因此比cookie安全多了。

 

九.两者区别:

1cookie数据存放在客户的浏览器上,session数据放在服务器上

2cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session

3session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE

4、单个cookie客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能大于3K


今天看到的,做个补充总结吧(引用)

1、session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息。

2、session中保存的是对象,cookie中保存的是字符串。

3、session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。

4、session默认需要借助cookie才能正常工作。如果客户端完全禁止cookie,session,这种方法将失效。

但是如果服务器端启用了url编码,也就是用

URLEncoder.encode("index.jsp?id=3","UTF-8");

把所有的url编码了,则会在url后面出现如下类似的东西

index.jsp:jsessionid=fdsaffjdlksfd124324lkdjsf?id=3

服务器通过这个进行session的判断

5 session在用户会话结束后就会关闭了,但cookie因为保存在客户端,可以长期保存

6 COOKIE:是服务端向客户端写入的小的片段信息。cookie信息保存在服务器缓存区,不会在客户端显现。当你第一次登陆一个网站,服务器向你的机器写得片段信息。你可以在Internet选项中找到存放cookie的文件夹。如果不删除,cookie就一直在这个文件夹中。


TAG:

引用 删除 tangxiang   /   2013-05-24 10:58:12
很好,讲解得很详细
引用 删除 tangxiang   /   2013-05-24 10:58:01
5
 

评分:0

我来说两句

我的栏目

日历

« 2024-05-18  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 1587
  • 日志数: 4
  • 建立时间: 2013-04-16
  • 更新时间: 2013-05-23

RSS订阅

Open Toolbar