标签:urlencode 关闭 att 计算机 response coder 传递 过程 servlet
会话技术:
	  会话:双方的交流或者交互,计算机中也是,浏览器和服务器的交互称之为会话
会话的生命周期:
	  开始:
		    浏览器访问服务器时会话开始
	  结束:
		    浏览器或者服务器一方中断时,会话结束
		    由于服务器一般一直处于持续运行状态,会话结束一般是浏览器关闭引起的
		
会话技术:交互过程中的数据存储技术
会话中会产生一些数据,比如:注册页面客户录入的数据,访问服务器的时间,后台生成的验证码...
数据怎么存储:
	  A、最常见方案 ---- 数据库存储
	  B、将数据存储到 Cookie ---- 数据由浏览器保存
	  C、将数据存储到 session --- 数据由服务器保存 (和数据库的区别,没有实现持久化存储)
Cookie
	  浏览器中的存储形式为:
		    站点(服务器硬件)项目(服务器所在程序)路径(具体的servlet)
	  创建Cookie并发送到浏览器:
		    Cookie c = new Cookie("键","值");
		    response.addCookie(c);  //没有设置路径Cookie的路径就是Servlet路径
			      底层封装:
				        响应头:set-cookie 键=值
				        浏览器进行保存:
				          选项 ----> 隐私 ----> cookie 查看
	        浏览器将Cookie携带到服务器:
		        将Cookie存储到请求头
			          键:cookie  
			          值:不同的Cookie使用";"隔开
	Cookie使用:
		  A、键重名时,后面的 Cookie 会覆盖前面的(当前阶段:Cookie 不能重名)
		  B、获取 Cookie 的键和值
			    getName()   getValue()
		  C、Cookie的存活时间
			    Cookie 默认存活至浏览器关闭 ----- Cookie 只在内存中
			    setMaxAge(时间值秒数) --- 可以设置 Cookie的存活时间 ---- 浏览器关闭时,会将 Cookie 序列化到磁盘文件
	      注意:
		        1、Cookie 怎么删除?
			          可以调用 setMaxAge(0)
		        2、setMaxAge(负数) --- 和不设置一样,存活到会话结束 
	  Cookie的重名存储
		    A:调用setPath实现,相同名称的Cookie如果path不同,那么可以重名存在	
		         Cookie.setPath("/day3701demo_cookie/a/b")
		         必须要指定这个路径才能获取到当前的这个Cookie,同时也能获得父级的目录
		    B:站点不同时,Cookie也可以重名
	  Servlet路径与Cookie获取
		    A:和Servlet同级的Cookie可以获取
		    B:父级下面的Cookie也可以获取到
	  Cookie的中文键值:
		    创建:Cookie c = new Cookie(URLEncoder.encode("中","UTF-8"),URLEncoder.encode("国","UTF-8"));
		    获取:键:URLDecoder.decode(c1.getName(),"UTF-8")
			         值:URLDecoder.decode(c1.getValue(),"UTF-8")
	  Cookie的限制:
			    1、在浏览器中一个Cookie存储的数据不超过 4kb
			    2、浏览器针对于一个服务器,最多支持 20 个cookie
			    3、浏览器最多就支持 300 个Cookie
			
Session:
	  1、Session 使用流程
		    A、第一次访问 Servlet ,调用 getSession 方法,这时会创建一个 Session 对象 ----- getSession --- 创建
		         并生成一个 cookie,cookie 和 session 是关联的(有相同的ID)(此时的Cookie被隐藏)
		    B、JSESSIONID 被发送到浏览器,浏览器保存
		    C、再次访问时,取出JSESSIONID 传递到服务器
		    D、服务器解析查找 对应的Session ---- getSession --- 获取已经存在的
		    E、使用 Session
	  2、session特点:
		     A、session 可以实现不同Servlet之间数据的共享
		     B、session 通过 Cookie 的ID 进行查找 cookie 的值刚好和 Session 对象的ID值一样
			      session和ServletContext比较:
				        ServletContext 不光在 Servlet 之间可以共享,对于每一个会话也是共享的
				        session 在 servlet 之间共享,但是每一个会话都有自己的一个session
	  3、session 使用语法
		    A、获取Session ---- request.getSession()
		    B、设置值 ---------- session.setAttribute("键",Object类型);
		         获取值 ------------ session.getAttribute("键") 
	   	         删除 --------------session.removeAttribute("键");
	  4、session 的生命周期
		    A、创建
			      第一次调用 getSession() 创建
			      getSession() ---- 第一次访问创建
			      getSession(true) - 第一次访问创建
			      getSession(false)- 第一次访问不会创建对象,得到null
		    B、使用
  
		    C、消亡
			      1、强制 Session 消亡 --- 调用invalidate() 方法
			      2、使用Tomcat 默认实现让 session 自然消亡 ----- 浏览器超过 30分钟不使用 session ,那么tomcat 会干掉 session
			      3、关闭服务器时,序列化 session ----- 正常关闭(客户端没有关闭)
			           非正常关闭:session 不能序列化,丢失了(序列化之后重新开启服务器此次会话的数据继续使用,丢失了重新设置)
	  5、session注意事项
    1、注意浏览器关闭时,一次会话结束,那么JSESSIONID 释放,这次会话对应的 Session ,下次访问不能获取到
		    2、服务器的session 超过默认的30分钟,就可以销毁了
作用域:
	  ServletContext ---- 全局有效(不同的客户端访问的是同一个)
	  session ----------- 不同servlet之间(不同的客户端访问会产生不同的session),一次会话中只有一个session
	  request ----------- 只是在本次请求有效
	
Session  和   Cookie
	  1、存储位置不同
	  2、存储的数据不同 cookie 字符串, session Object类型
	  3、存储个数不同 
	  4、cookie 不安全,以文件方式存储在浏览器的对应的磁盘上
	  5、cookie 和 session 比较 session 加大服务器端的压力,cookie 不存在这个问题
	  6、浏览器禁用Cookie,session 必须结合URL重写
标签:urlencode 关闭 att 计算机 response coder 传递 过程 servlet
原文地址:http://www.cnblogs.com/chonglchong/p/6850891.html