会话技术
(一)Cookie 是客户端技术
javax.servlet.http.Cookie
1)Cookie是什么?
Cookie是一段小信息。Servlet把这些小信息(HTTP响应头中的Set-Cookie)写到客户端的缓存中,客户端访问服务器时还能带着小信息(HTTP请求头中的Cookie)。
2)Cookie的属性:
name:必须的
value:必须的。并且value值不能是中文
comment:(可选的)注释
path:(可选的)
写Cookie的程序的访问路径是:<a target=_blank href="http://localhost:8080/Test/servlet/CookieDemo1">http://localhost:8080/Test/servlet/CookieDemo1</a>
其中:localhost就是域名;/Test/servlet就是当前Cookie的path
若访问的地址的URI是以cookie的路径(path)开头的,则发出的请求就会带上这个Cookie
eg:
1、cookie的路径是/Test
现在访问的地址是:http://localhost:8080/Test/servlet/CookieDemo1 带Cookie
现在访问的地址是:http://localhost:8080/Test/CookieDemo1 带Cookie
2、cookie的路径是/Test/servlet/
现在访问的地址是:http://localhost:8080/Test/servlet/CookieDemo1 带Cookie
现在访问的地址是:http://localhost:8080/Test/CookieDemo1 不带Cookie
domain:(可选的)默认值是写Cookie的那个网站。如果domain取值为localhost,那么只有访问localhost这个网站时才会带过去。
maxAge:(可选的)
设置Cookie的最大存活时间,单位是秒。
如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。
若希望浏览器将该cookie存储在磁盘上,则需要设置maxAge。将maxAge设置为0,则是命令浏览器删除该cookie。注意:删除cookie时,path必须一致,否则不会删除
version:可选的。
注意:属性是从服务器发送到浏览器的报头的一部分;但它们不属于由浏览器返回给服务器的报头。
因此除了名称和值之外,cookie其它的属性只适用于从服务器输出到客户端的cookie;服务器端来自于浏览器的cookie并没有设置这些属性。
3)向客户端写Cookie:HttpServletResponse.addCookie(Cookie)(就是写了一个响应消息头:Set-Cookie:cookie的信息)
特点:一个浏览器针对一个网站可以存储有限(几百)个Cookie;每个Cookie的长度不能超过4KB。
4)服务器得到客户端传来的Cookie:HttpServletRequest.getCookies()
5)区分Cookie:domian+path+name:唯一定位一个Cookie eg:localhost:8080/Test/servlet/CookieDemo1
(二)HttpSession是服务器端技术
1)服务器可以为每个用户浏览器创建一个session对象,注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中。
2)HttpSession实际上用的是cookie技术。服务器向客户端写了一个特殊的cookie,名字为"JSESSIONID",值为当前session对象的id(由服务器生成、唯一),path是当前应用。
3)HttpSession中常用的方法
a、得到HttpSession对象:HttpServletRequest.getSession():根据客户端cookie(JSESSIONID=HttpSession对象的id)的值查找session对象,若没有,创建一个session对象。
b、HttpServletReqeust.getSession(boolean create):如果为true,与a没有区别。如果为false,只会查找。
c、HttpSession.getId():唯一的session对象标识。
4)更改内存中HttpSession对象的超时时间。
修改web.xml
<session-config>
<session-timeout>1</session-timeout><!--自然整数,单位是分钟-->
</session-config>
(三)Cookie和Session的关系与区别
关系:
在服务器端保存数据的方案,也需要在客户端保存一个标识,所以session机制需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择,比如说URL重写和隐藏表单域。
区别:
储存位置:
Cookie是把用户的数据写给浏览器,数据存放在浏览器上(C:\Documents and Settings\用户名\Local Settings\Temporary Internet Files 目录下 或 C:\Users\用户名\AppData\Local\Microsoft\Windows\Temporary Internet Files 目录下 )
Session是把用户的数据写到用户独占的session中,在一定的时间内保存在服务器上,当访问增多,会比较占用服务器的性能,考虑到提高服务器性能方面,应当使用COOKIE
存取的内容:
Cookie中只能保存ASCII字符串,如果需要存取Unicode字符或者二进制数据,需要进行UTF-8,GBK或者BASE64等方式的编码。Cookie中也不能直接存取Java对象。若要存储稍微复杂的信息,使用Cookie是比较困难的。
而Session中可以存取任何类型的数据,包括而不限于String、Integer、List、Map等。Session中也可以直接保存JavaBean乃至任何Java类,对象等,使用起来非常方便。
安全性:
Cookie存储在客户端浏览器中,对客户端是可见的,客户端的一些程序可能会窥探、复制甚至修改Cookie中的内容。
Session存储在服务器上,对客户端是透明的,所以比较安全。
对服务器的负担
Session是保存在服务器端的,每个用户都会产生一个Session。如果并发访问的用户非常多,会产生非常多的Session,消耗大量的内存。因此像Google、Baidu、等并发访问量极高的网站,是不太可能使用Session来追踪客户会话的。
Cookie保存在客户端,不占用服务器资源。如果并发浏览的用户非常多,Cookie是很好的选择。对于Google、Baidu来说,Cookie也许是唯一的选择。
大小:
每个Cookie的长度不能超过4KB,Session理论上无限制。
Cookie和Session详解
最新推荐文章于 2020-10-10 10:24:04 发布