欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

javaWeb-06-Cookie&Session会话技术

程序员文章站 2022-07-03 12:42:41
内容介绍案例一:记录用户的上次访问时间案例二:在登录案例上添加一次性验证码案例一:记录用户的上次访问时间需求:在用户登录网站上的时候,显示该用户上次的访问时间技术分析:会话技术1 什么是会话技术? 页面之间的数据交互会话: 当打开浏览器的时候,意味会话开始了在这过程中,我们可以有N个请求当关闭浏览器的时候,意味会话结束了 打电话: 当电话接通,意味着会话开始 在这过程中,可以有N多交流 当电话挂断,意味着会话结束2 会话技术的...

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

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

技术分析:会话技术

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

相关标签: java javaWeb知识