HTTP协议—Seesion和cookies

上一篇 / 下一篇  2014-11-07 14:32:54 / 个人分类:HTTP协议

CookieSession都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所做的努力。

Session可以用Cookie来实现,也可以用URL重写的机制来实现。用Cookie来实现的Session可以认为是对Cookie更高级的应用。

1.Cookies

网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookiesSession并没有在HTTP的协议中定义.

Cookies实现机制:服务器在响应消息中用Set-Cookie头将Cookie的内容回送给客户端,客户端在新的请求中将相同的内容携带在Cookie头中发送给服务器。从而实现会话的保持。

2.Session

Session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个用户session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器;

Session实现机制:使用Cookie来实现

服务器给每个Session分配一个唯一的JSESSIONID,并通过Cookie发送给客户端。当客户端发起新的请求的时候,将在Cookie头中携带这JSESSIONID。这样服务器能够找到这个客户端对应的Session

Session实现机制:URL回写机制实现

       URL回写是指服务器在发送给浏览器页面的所有链接中都携JSESSIONID的参数,这样客户端点击任何一个链接都会把JSESSIONID带会服务器。

如果直接在浏览器输入服务端资源的url来请求该资源,那么Session是匹配不到的。

       TomcatSession的实现,是一开始同时使用CookieURL回写机制,如果发现客户端支持Cookie,就继续使用Cookie,停止使用URL回写。如果发现Cookie被禁用,就一直使用URL回写。

3.注意点

注意一:cookiessession有效期如何计时

session是从无操作开始计时
cookie
是从cookie文件生成开始计时,

注意二:session不跨浏览器窗口

  新开的浏览器会话窗口会生成新的Session,但子窗口除外。子窗口会共用父窗口的Session。例如,在链接上右击,在弹出的快捷菜单中选择"在新窗口中打开"时,子窗口便可以访问父窗口的Session。所以在浏览器中新建一个窗口其实就是子窗口,会出现串号的问题仍属于同一会话,同一session。建一个会话窗口则不会出现串号的问题,因为在会话层重新生成了一个session id

注意三:Session存储在服务器端,一般为了防止在服务器的内存中(为了高速存取),Sessinon在用户访问第一次访问服务器时创建,需要注意只有访问JSPServlet等程序时才会创建Session,只访问HTMLIMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session

注意四:TOMCAT判断客户端浏览器是否支持Cookie的依据是请求中是否含有Cookie。尽管客户端可能会支持Cookie,但是由于第一次请求时不会携带任何Cookie(因为并无任何Cookie可以携带),服务器响应的HTML页面中URL地址(URL地址重写)中包含JsessionID(jsessionid只是tomcat中对session id的叫法,在其它容器里面,不一定就是叫jsessionid),服务器响应中JavaScript会判断浏览器是否启用cookie,启用则会把JsessionID写入到cookies中(这个cookies是内存cookies,跟一般的不一样,它会随着浏览器的关闭而消失)。当第二次访问时服务器已经在浏览器中写入Cookie了,因此URL地址重写后的地址中就不会带有jsessionid了。

 

 

 

 

 


TAG:

 

评分:0

我来说两句

Open Toolbar