当前位置: 移动技术网 > IT编程>开发语言>Java > javaWeb-06-Cookie&Session会话技术

javaWeb-06-Cookie&Session会话技术

2020年07月23日  | 移动技术网IT编程  | 我要评论

内容介绍
案例一:记录用户的上次访问时间
案例二:在登录案例上添加一次性验证码

案例一:记录用户的上次访问时间
需求:
在用户登录网站上的时候,显示该用户上次的访问时间

技术分析:会话技术

1 什么是会话技术? 页面之间的数据交互
会话: 当打开浏览器的时候,意味会话开始了
在这过程中,我们可以有N个请求
当关闭浏览器的时候,意味会话结束了

       打电话: 
           当电话接通,意味着会话开始
	   在这过程中,可以有N多交流
	   当电话挂断,意味着会话结束

2 会话技术的作用?
作用:就是存错多个请求过程中产生的数据

3 会话技术的分类
客户端(浏览器)的会话技术:cookie 把数据存储在浏览器端
服务器(tomcat)的会话技术:session 把数据存储在服务器端


客户端的会话技术:cookie

1 什么是cookie? cookie有什么作用?
cookie: 服务器给浏览器的小纸条
作用:记录传递数据的

2 如何使用cookie?

1 服务器如何给客户端写小纸条(cookie)
	new Cookie("数据");

2 服务器如果把小纸条(cookie)传递给客户端
       
        1://写入响应头   已经过时的方法
	   response.setHeader("Set-Cookie", "cd1hehe=zhangsan");  
	   Set-Cookie:cd1hehe=zhangsan   
	
	
	2://底层自动帮你写Set-Cookie的响应头
	   response.addCookie(cookie);   
	   
	    

	浏览器: 接收cookie---存储cookie---传递cookie  (浏览器保存的cookie存在key值覆盖)
	服务器: 创建cookie---传递cookie---接收处理cookie

3 cookie技术的深入

1 如何将请求头中的cookie信息在服务器中取到?
	request.getHeader("Cookie");  // 多个cookie还需要切割

	request.getCookies(); //自动从请求头中获取cookie信息,并且切割并封装成多个cookie对象

4 cookie的常用API操作
常用方法:
getName(); 返回值String,返回的是cookie的key
getValue(); 返回值String,返回的是cookie的value

关闭情况

案例一步骤分析:
1 需要2个servlet(lastTimeServlet和showTimeServlet)

	2 lastTimeServlet:创建时间
		   1 创建小纸条(上面的数据是系统的当前时间)
		   2 把小纸条响应给浏览器

	3 showTimeServlet:显示用户上一次访问时间
		   1 获取小纸条
		   2 拿出小纸条的数据响应给浏览器,让浏览器显示访问时间

总结:
cookie的生命周期

默认情况下:
会话级别cookie,保存在浏览器的缓存中。
会话开启 -----------(cookie存活)----------会话结束----cookie死亡

特殊情况:
持久化cookie,保存在浏览器对应的硬盘上。
setMaxAge(); 设置最大生存时间(秒)
-1 会话级别的cookie。默认

		>0   会把cookie持久化保存硬盘上
		     如果cookie过期了,浏览器就不会传递这个cookie了

		0   立即过期 关闭或移除cookie

小知识:
1 cookie保存是有限制的。
大小限制:value 最多保存4kb内容。不能向cookie中存储大数据
数量限制:一个网站一个项目最多向一个浏览器保存30个cookie。

2 cookie不仅仅是javaee技术,asp,php,android
  因为cookie是http协议制定

3 cookie不能直接存储中文。

服务器端的会话技术:session

案例二:在登录案例上添加一次性验证码

需求:
当我们在登录的时候,需要用户填写验证码
若验证码没写或者验证码写错了,都不允许登录

技术分析:Session

1 Session是什么?作用?
session是保存在服务器端的会话技术
作用:也是为了保存会话中产生的数据

注意:Session是一个域对象,作用范围:针对一次会话有效

2、session怎么用?

域对象使用步骤:
①获取域对象
	HttpSession session = request.getSession(); 
							
②使用域对象
	session.xxxattrbute("name","张三")

3 案例二的实现


4 session的深入

1 如何保证在一次会话中,使用的都是一个session对象。
	通过JSESSIONID来保证是同一个session对象
  


2 为什么浏览器关闭了,session对象就换了呢?
	
	浏览器一关闭cookie销毁,里面的jsessionid丢失了,就无法对应之前的session对象。
	服务器发现你没有jsessionid,就判断你是第一次来,就会给你再创建一个新的session对象。

5 getSession()实现步骤。

调用getSession方法时,首先判断cookie中是否有jsessionid。
如果不存在jsessionid,那么直接创建一个新的session对象返回给你,
并且向响应头中写一个新的jsessionid存放cookie给浏览器。【相当于第一次来银行创建账户】

如果存在jsessionid,那么还要尝试从服务器内存中去获取session对象。
如果获取到session对象,直接返回使用。【相当于第二次来银行,用银行卡号操作账户】

(浏览器关闭)判断cookie中是否有jsessionid,如果没有,那么直接创建一个新的session对象返回给你,
并且向响应头中写一个新的jsessionid存放cookie给浏览器。【银行卡丢了,创建一个新账户,给一张新卡】

6、session对象的常用API

       常用方法:
		String getId()
			返回session的jsessionid
		
		invalidate()     
			主动销毁session对象。
			一般是不用。
	域对象(掌握):
		void setAttribite(String name,Object value)
		String getAttribute()
		void removeAttribute(String name)

7、session生命周期(面试)

创建:第一次调用request.getSession();


销毁:
	1、主动销毁   invalidate();
	
	
	2、服务器非正常关闭 [断电、强制关机重启、Console--->Terminate] 
	  【服务器正常关闭,之前的数据还存在的。  stop】
	
	
	3、session 30分钟自动过期,过期后销毁(离开电脑30分钟不点击)
	  
	   tomcat配置文件中:	
		tomcat/conf/web.xml

		<session-config>
    			<session-timeout>30</session-timeout>
		</session-config>

本文地址:https://blog.csdn.net/u014692224/article/details/107523206

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网