Javaweb session和cookie的关系

HttpSession接口封装了Session的概念,Servlet容器提供了这个接口的实现。当一个会话开始的时候,Servlet容器就创建一个HttpSession对象,在HttpSession对象中存放客户的状态信息,Servlet容器为HttpSession对象分配一个唯一的Session ID,将其作为Cookie(或者作为URL的一部分,利用URL重写机制)发送给浏览器,浏览器在内存中保存这个Cookie。当这个客户再次发送HTTP请求时,浏览器将Cookie随请求一起发送,Servlet容器从请求对象中读取Session ID,然后根据Session ID找到对应的HttpSession对象,从而得到客户的状态信息。

Cookie是在浏览器访问Web资源时,由Web服务器在HTTP响应消息中通过Set-Cookie字段发送给浏览器的一组数据。服务器利用响应报头Set-Cookie来发送Cookie信息。在Servlet规范中,用于会话跟踪的Cookie的名字必须是JSESSIONID。

为了跟踪用户的会话,服务器端在创建Session后,需要将SessionID交给客户端,在客户端下次请求时,将这个ID随请求一起发送回来。采用Cookie的方式,将SessionID发送给客户端。当客户端不接受Cookie的时候,可以使用URL重写的机制来跟踪用户的会话。

Session是一种服务器端技术,Session对象在服务器端创建,在服务器端保存数据信息并通过SessionID进行跟踪。而Cookie在客户端(浏览器内存或硬盘)保存信息(解决方案:会员卡或者目标卡?)。一般来说,登录信息等重要信息存放到session内,其他信息可以放到Cookie中。

通常将用于会话跟踪的Cookie叫做会话Cookie(临时Cookie),名字为JSESSIONID,通常保存在浏览器的内存中。是不能被不同的浏览器进程所共享的。共享只能发生在同一个浏览器进程的不同窗口中。而将会话Cookie保存到硬盘上(永久Cookie)可以在多个浏览器进程之间共享。因为浏览器关闭,则意味着保存SessionID的Cookie(临时Cookie)消失,而Session仍然存在于服务器端,直到超时时间间隔发生。如果会话Cookie保存到硬盘(永久Cookie),那么将SessionID发送给服务器,再次打开的浏览器就能找到原来的Session。

猜你喜欢

转载自blog.csdn.net/D_mengxin/article/details/84377649
今日推荐