**会话技术_Cookie& Session *

今日内容

1.会话技术
	* Cookie
	* Session
2.JSP:入门学习

会话技术

1.会话:一次会话中包含多次请求和响应
	* 一次会话:浏览器第一次给服务器资源发送请求,会话建立,一直到某一端断开连接,会话结束。
2.功能:共享数据(在一次会话的范围内共享数据)
	 	 * 浏览器和服务器是无状态请求,就是说,每次的请求之间相互独立,互不沟通。通过会话技术,可以让服务器和浏览器在多次请求间共享数据。
3.方式:会话技术:每次请求和响应之间本质是无法共享数据的,但是我们可以把请求响应的数据保存在浏览器或者服务器,相当于就可以间接的进行数据的交流。
	1.客户端会话技术:Cookie
	2.服务器端会话技术:Session

Cookie:将数据最终保存在浏览器端的会话技术,可以让多次请求之间实现数据的交流。

1.概念:客户端会话技术,将数据保存在客户端。
2.快速入门:
	* 使用步骤:
		1.创建Cookie对象,绑定数据
			* new Cookie(String name,String value);
		2.发送Cookie对象。
			* response.addCookie(Cookie cookie)
		3.获取Cookie,拿到数据。
			* Cookie[] request.getCookies()
	-- 注意:只要是一次会话,Cookie会一直带着。

3.原理:
	* 基于响应头set-cookie和请求头cookie实现
	
4.cookie实现的细节:
	1.一次可不可以发送多个cookie?
		* 可以,可以创建多个cookie对象,使用response调用多次addCookie方法发送cookie即可。
	2.cookie在浏览器中保存多长时间?
		* 默认情况下,当浏览器关闭后,Cookie数据被销毁
		* 持久化存储:
			* setMaxAge(int seconds)  该方法参数有三种取值,如下:
				1.正数:将Cookie数据写到硬盘的文件中。持久化储存。cookie存活时间,设置正数,单位是秒。
				2.负数:默认值		eg:cookie.setMaxAge(0);
				3.零:删除cookie信息
	3.cookie能不能存中文?
		* 在tomcat 8之前 ,cookie中不能直接储存中文数据。
			* 需要将中文数据转码---一般采用URL编码(%E3...)
		* 在tomcat 8之后,cookie支持中文数据。特殊字符还是不支持,建议采用URL编码储存,URL解析。
	4.cookie共享问题?
		1. 假设在一个tomcat服务器中,部署了多个web项目,那么在这些web项目中cookie能不能共享?
			* 默认情况下cookie不能共享。
			* setPath(String path):设置cookie的获取的范围。默认情况下,设置当前的虚拟目录。
			* 如果要共享,则可以将path设置为"/"  eg:   c1.setPath("/")
		2.不同的tomcat服务器间cookie共享问题。
			* setDomain(String path):如果设置一级域名相同,那么多个服务器之间cookie可以共享。
				* setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中cookie可以共享。
5.Cookie的特点和作用:
	1.cookie储存数据在客户端浏览器。   不太安全:容易丢失和被篡改
	2.浏览器对于单个cookie的大小有限制(4kb),以及对同一个域名下的总cookie数量也有限制(20个),每个浏览器的个数和大小限制也有可能不一样。
		* 作用:
			1.cookie一般用于储存少量的,不太敏感的数据
			2.在不登录的情况下,完成服务器对客户端的身份识别。

	案例:记住上一次的访问时间
		需求:
			1.访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您首次访问
			2.如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串。
注意:
	* 第一次访问,没有cookie数据,则为null,需要加一个非空判断
	* 在Cookie中不能储存空格等特殊字符,所以我们储存的是时间毫秒值。
	* 当回显给浏览器的时候,我们会将事件毫秒值转换为一个特定改格式的日期字符串。
	* 在登录案例的时候,判断两个是否相等应该判断字符串名称是否相等。

JSP: 入门学习

1.概念:
	* Java Server Pages:java服务端页面
		* 可以理解为:一个特殊的页面
		* 用于简化书写!
	-- JSP:帮我们把JSP中的内容,转换为Java代码,免去了我们自己用write("<html>...</html>")	.
2.原理:
	* JSP本质上就是一个Servlet
	* 服务器会帮我们把JSP页面转换为一个Servlet,把JSP中的java代码,原样展示。把JSP中的html标签,会帮我们用out.write("标签");
	* JSP页面中:html中的内容    java代码
	1.服务器解析请求消息,找是否有index.jsp资源
	2.如果找到了,会将index.jsp转换为.java文件
	3.编译.java文件,生成.class字节码文件
	4.由字节码文件提供访问

3.JSP的脚本:JSP定义Java代码的方式。
	1.<% 代码 %>:定义的java代码,在service方法中。service中可以定义什么,该脚本中就可以定义什么。
	2.<%! 代码 %>:定义的java代码,定义成员变量和成员方法
	3.<%= 代码 %>:定义的java代码,会输出到液面上。输出语句是什么
	(它是定义在service中,如果输出局部和成员变量同样的变量的时候,输出采用就近原则输出局部变量,它类似于System.out.print( 代码 ) 或 out.write( 代码 ) )
* 总之,带!的定义在java类成员位置,带=输出,其他的都放在service中,我们尽量不要定义成员变量,在多线程中容易引发线程安全问题。

4.JSP的内置对象:
	* 在jsp页面中不需要获取和创建,可以直接使用的对象
	* jsp一共有9个内置对象
	* 今天学习3个:
		* request
		* response
		* out:字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似。
			* response.getwriter()和out.writer的区别:
				-- 在tmocat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数区。所以response.getwriter永远打印在out.writer前,out.writer打印会在什么位置打印就会出现在什么位置。所以建议使用out.writer打印。使用response会容易影响页面布局。

Session:主菜

1.概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession。
2.快速入门:
	1.获取HttpSession对象:
		* HttpSession session=request.getSession
	2.使用HttpSession对象:
		* Object getAttribute()
		* void setAttribute()
		* void removeAttribute()
3.原理:
	* 举一个例子:服务器相当于银行,而客户端相当于客户。银行办卡(request.getSession)充钱(setAttribute),然后把带着卡号的卡给了客户,钱储存在了银行。第二次客户来银行取钱。然后拿着卡号找自己对应的金额信息,获取到了金钱。过程依赖于Cookie
	
4.细节:
	1.当客户端关闭后,服务器不关闭,两次获取Session是否为同一个?
		* 默认情况下,不是。
		* 如果需要相同,则可以创建Cookie,键为JSESSIONID,值为id的值,设置最大存活时间,让cookie持久化存活。
		* Cookie c=new Cookie("JsessionID","session.getId()")
		* c.setMaxAge(60*60);
		* response.addCookie(c);
	2.客户端不关闭,服务器关闭后,两次获取的Session是同一个吗?	
		* 不是同一个:
		* 服务器重新启动后,创建的Session对象的内存地址不同,所以储存的数据会丢失。
		* 可以使用session的钝化和活化解决:
			* session的钝化:在服务器正常关闭之前,将sessiond对象序列化到硬盘上
			* session的活化:在服务器启动后,将session文件转化为内存中的session对象即可。
				
	3.session什么时候被销毁?
		1.服务器被关闭
		2.session对象调用invalidate()
		3.session默认失效时间是30分钟
			选择性配置修改:
				<session-config>
					<session-timeout>30</session-timeout>
				</session-config>

5.session的特点:
	1.session用于储存一次会话的多次请求的数据,存在服务器端。
	2.session可以储存任意类型,任意大小的数据。
	
	* session与Cookie的区别:
		1.session储存数据在服务器端,Cookie在客户端
		2.session没有数据大小限制,Cookie有
		3.session数据安全,Cookie相对不安全(因为Cookie储存在客户端,容易丢失和被篡改)

案例:验证码

1.案例需求:
	1.访问带有验证码的登录页面login.jsp
	2.用户输入用户名,密码以及验证码。
		* 如果用户名和密码输入有误,跳转登录页面,提示:用户名或密码错误
		* 如果验证码输入有误,跳转登录页面,提示:验证码错误
		* 如果全部输入正确,则跳转到主页success.jsp,显示:用户名,欢迎您。

Cookie案例_记住上次访问时间

Cookie案例登录时间验证

JSP截断的代码演示

持久化储存cookie时间的代码演示

JSP原理

登录案例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dpy0fxQF-1622192874629)(https://i.imgur.com/abfmycv.png)]

延长Session生命周期的代码演示,期望客户端关闭后,session也能相同

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pIZJlZgm-1622192874629)(https://i.imgur.com/09ZpSD0.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暗余

码字来之不易,您的鼓励我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值