cookie机制和session机制

1.    cookie机制

cookie存放在客户端(HTTP响应头),可以弥补HTTP协议无状态的不足。

如果cookie的生存时间是整个会话期间的话,那么浏览器会将cookie保存在内存中,浏览器关闭时就会自动清除这个cookie。另外一种情况就是保存在客户端的硬盘中,浏览器关闭的话,该cookie也不会被清除,下次打开浏览器访问对应网站时,这个cookie就会自动再次发送到服务器端。


查看某个网站颁发的Cookie很简单。在浏览器地址栏输入javascript:alert (document. cookie)就可以了(需要有网才能查看)。

通过request.getCookie()获取客户端提交的所有Cookie(以Cookie[]数组形式返回),通过response.addCookie(Cookie cookie)向客户端设置Cookie。

Cookie对象使用key-value属性对的形式保存用户状态,一个Cookie对象保存一个属性对,一个request或者response同时使用多个Cookie。

Cookie是不可跨域名的,name相同但domain不同的两个Cookie是两个不同的Cookie。

 

2.    session机制

session存放在客户端,在创建了Session的同时,服务器会为该Session生成唯一的Session id(保存在cookie中),而这个Session id在随后的请求中会被用来重新获得已经创建的Session;

Session的使用比Cookie方便,但是过多的Session存储在服务器内存中,会对服务器造成压力。

HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。

为了防止客户端禁用了cookie而无法使用session的情况可以把sessionId和其他用户信息重写到url中,每次请求都在url中附带sessionId和用户信息(不包含用户的敏感信息)

新开的浏览器窗口会生成新的Session,但子窗口除外。

Session的生命周期

       Session在用户第一次访问服务器的时候自动创建。需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session。如果尚未生成Session,也可以使用request.getSession(true)强制生成Session。

3.    Cookie与Session的区别

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

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

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

d.   一个站点在客户端存放的COOKIE不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

 

猜你喜欢

转载自blog.csdn.net/hjing123/article/details/80721047
今日推荐