资源描述
SessionSession 定义一般被翻译为会话具体到Web中的Session指的就是用户在浏览某个网站时,从 进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。因此从 上述的定义中我们可以看到,Session实际上是一个特定的时间概念。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。比如:JSESSIONID二By0K3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLe门Q99zWpBng!-145788764 它的名字就是JSESSIONIDo由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做URL重写。就是把session id直接附加在URL路径的后面,附加方式也有两种:1. 一种是作为 URL 路径的附力口信息,表现形式为http:/xxx;jsessionid二ByOK .99zWpBng!-1457887642.另一种是作为查询字符串附加在URL后面,表现形式为http:/xxx?jsessionid=ByOK.99zWpBng!-145788764这两种方式对于用户来说是没有区别的,只是服务器在解析的时候处理的方式不同,采 用第一种方式也有利于把session id的信息和正常程序参数区分开来。为了在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个 session id。另一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便 在表单提交时能够把session id传递回服务器。这种技术现在已较少应用。有一种一种误解:“只要关闭浏览器,session就消失了”。其实可以想象一下会员卡 的例子,除非顾客主动对店家提出销卡,否则店家绝对不会轻易删除顾客的资料。对session 来说也是一样的,除非程序通知服务器删除一个session,否则服务器会一直保留,程序一 般都是在用户做log off的时候发个指令去删除sessiono然而浏览器从来不会主动在关闭 之前通知服务器它将要关闭,因此服务器根本不会有机会知道浏览器已经关闭。之所以会有这种错觉,是大部分session机制都使用会话cookie来保存session id, 而关闭浏览器后这个 session id就消失了,再次连接服务器时也就无法找到原来的session。如果服务器设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的 HTTP请求头,把原来的session id发送给服务器,则再次打开浏览器仍然能够找到原来的 sessi on。失效客户端 cookie储存CookieSessionID不包含SessionID丢失关斓览器Session就消失Draw By. Orange恰恰是由于关闭浏览器不会导致session被删除,迫使服务器为seesion设置了一个失 效时间,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就可以认为 客户端已经停止了活动,才会把session删除以节省存储空间。CookieCookie定义“Cookie”是小量信息。由服务器发送出来以存储在浏览器上,从而下次这位访客又回 到该网络服务器时,可从该浏览器读回此信息。Cookie工作原理般来说,Cookie通过HTTP Headers从服务器端返回到浏览器上。路径与域合在一起就构成了 cookie的作用范围。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。首先,服务器端在响应中利用Set-Cookie header来创建一个Cookie,然后,浏览器在它 的请求中通过Cookie header包含这个已经创建的Cookie,并且把它返回至服务器,从而 完成浏览器的论证。服务器浏览器完成浏览器的论证Draw By. Orange图比较简陋。)例如,我们创建了一个名字为login的Cookie来包含访问者的信息,创建Cookie时,服务 器端的Header如下面所示,这里假设访问者的注册名是“Orange”,同时还对所创建的Cookie 的属性如pathdomain、expires等进行了指定。下面就是一个goolge设置cookie的响应头的例子HTTP/1.1 302 FoundLocation: Set-Cookie:PREF=ID=0565f77el32del38:NW=l:TM=1098082649:LM=1098082649:S=KaeaCFPo49RiA_d8; expires二Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain二Content-Type: text/htmlHeader会自动在浏览器端计算机的Cookie文件中添加一条记录。浏览器将变量名为 “login”的Cookie赋值为“ Orange”。注意,在实际传递过程中这个Cookie的值是经过了 URLEncode方法的URL编码操作的。这个含有Cookie值的HTTP Header被保存到浏览器的 Cookie文件后,Header就通知浏览器将Cookie通过请求以忽略路径的方式返回到服务器, 完成浏览器的认证操作。Expires:该Cookie保存的时间期限。当然,如果浏览器上Cookie太多,超过了系统所允 许的范围,浏览器将自动对它进行删除。Path:用来指定Cookie将被发送到服务器的哪一个目录路径下。说明:刘览器创建了一个Cookie后,对于每一个针对该网站的请求,都会在Header中带着 这个Cookie;不过,对于其他网站的请求Cookie是绝对不会跟着发送的。而且浏览器会这 样一直发送,直到Cookie过期为止。识别功能如果在一台计算机中安装多个浏览器,每个浏览器都会在各自独立的空间存放cookie。 因为cookie中不但可以确认用户,还能包含计算机和浏览器的信息,所以一个用户用不同 的浏览器登录或者用不同的计算机登录,都会得到不同的cookie信息,另一方面,对于在 同一台计算机上使用同一浏览器的多用户群,cookie不会区分他们的身份,除非他们使用 不同的用户名登录。Session 和 Cookie 的区别1、session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,服务器能够 知道其中的信息。2、session中保存的是对象,cookie中保存的是字符串。3、session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个 地方都可以访问到。而cookie中如果设置了路径参数,那么同一个网站中不同路径下的 cookie互相是访问不到的。4、session默认需要借助cookie才能正常工作。如果客户端完全禁止cookie, session, 这种方法将失效。但可以URL重写。5 session在用户会话结束后就会关闭了,但cookie因为保存在客户端,可以长期保存6 cookie:是服务端向客户端写入的小的片段信息。cookie信息保存在服务器缓存区,不会 在客户端显现。当你第一次登陆一个网站,服务器向你的机器写得片段信息。你可以在Internet选项中找到存放cookie的文件夹。如果不删除,cookie就一直在这个文件夹中。By Orange
展开阅读全文