码迷,mamicode.com
首页 > 其他好文 > 详细

Cookie和Session详解

时间:2015-05-31 00:09:31      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:cookie   session   

						           会话技术
(一)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理论上无限制。


Cookie和Session详解

标签:cookie   session   

原文地址:http://blog.csdn.net/wodewutai17quiet/article/details/46279445

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!