会话技术 (一)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的信息) 特点:一个浏览器针对一个网站最多存20个Cookie;一共最多存300个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理论上无限制。
原文地址:http://blog.csdn.net/wodewutai17quiet/article/details/46279445