cookie&session

浏览器与服务器交互信息的获取

请求头:浏览器告诉服务器请求的基本信息

在这里插入图片描述
基于http1.0版本,断开连接的
无连接:浏览器和服务器之间每一次都要建立连接,如果通信结束之后,把连接断掉,将协议升级到http1.1该问题得到了解决
无状态:浏览器和服务器之间谁也不认识谁,cookie和session将该问题得到了解决

基于http1.1版本,维持连接的

响应头:服务器告诉浏览器响应的基本信息

在这里插入图片描述

响应状态码

200:响应成功
404:找不到的资源,路径访问有问题
405:请求方式不被接受
500:java代码错误,找不到的servlet类
302:重定向
304:读取浏览器缓存

浏览器对于头信息的观察

打开浏览器,输入访问路径
在敲回车之前,点击F12
点击F12后,出现开发者信息栏
再敲回车,发出请求
在这里插入图片描述
在这里插入图片描述

cookie

cookie概述,执行原理

客户端的会话技术,cookie对象是保存在浏览器上的
在这里插入图片描述
原理概述:设想这么一个情景,我在“市政府”办事,但是市政府不是想进就能进的,
我第一次到政府,传达室的人让我登记一下,然后让领导来接我,领导接我以后,比如我又渴了,然后出去买水,进来的时候,还得进行身份验证,让领导来接,很麻烦,所以呢,市政府改了机制,当第一次进行身份验证的时候,领导会给我发一块临时工作证,这样我再出去买水,在进来的时候,就不用进行身份验证,见工作牌者,犹见掌门人,对比上图来说:我就相当于浏览器,服务器端就相当于政府,loginServlet相当于身份验证,StudentListServlet相当于政府内部,我第一次去访问政府,通过身份验证后,市政府,政府给了我一块临时工作证,就是new了一个cookie对象,在loginServlet响应式时,将cookie对象响应给浏览器,也就是说当我从市政府出去的时候,这块工作证装在我身上,当我下次再进政府的时候,不用再经过身份的登记,直接亮工作证就可以直接进入政府内部(相当于携带了cookie对象),也就是说可以直接访问StudentListServlet,临时工作证毕竟是临时的,有期限限制,比如说有效时间就是三天,这个有效时间就是cookie对象的失效时间

没有设置cookie对象失效时间的情况下
案例1
打开浏览器,访问servlet1,servlet1响应回一个cookie对象
在不重新启动浏览器的条件下,访问servlet2,携带cookie对象访问
案例2
打开浏览器,访问servlet1,servlet1响应回一个cookie对象
重新启动浏览器的条件下,访问servlet2,不携带cookie对象访问
总结1和2:
在没有设置cookie对象失效时间的情况下,cookie对象是保存在浏览器的内存上,在关闭了浏览器之后,cookie对象自动销毁.所以重启浏览器后,就不携带cookie对象访问了.

设置cookie对象失效时间的情况下
案例3
打开浏览器,访问servlet1,servlet1响应回一个cookie对象
不论重启浏览器或者不重启浏览器,只要cookie没有超过失效时间, 访问servlet2就一定携带cookie对象,如果超过了失效时间,就不携带cookie对象.
总结3:
设置了cookie对象的失效时间后,cookie对象是保存在了浏览器所在的硬盘上.超过失效时间,cookie对象自动销毁.

cookie的应用
javax.servlet.http.Cookie
	(1)创建一个cookie
		new Cookie(String key,String value)
	(2)写回浏览器:
		response.addCookie(Cookie c)
	(3)获取cookie:
			Cookie[] request.getCookies()
	(4)获取cookie的key(名称)
			getName():
	(5)获取指定cookie的值
			getValue()
	(6)设置访问域
			setPath("/1_servlet1")
			默认的情况下是在一个包下才会共享 cookie对象,
			以上的设置是在一个项目下就会共享cookie对象
			setPath("/")
			以上的设置表示只要在该端口号下的项目都会共享cookie对象
	(7)设置存储时间
			setMaxAge(秒)
					时间大于0:cookie存放到硬盘中
					不设置:cookie存放到内存中
cookie的常用方式及在浏览器中的设置

(1)结合126的十天免登陆
在这里插入图片描述
当输入账号和密码通过验证后,126服务器会创造一个cookie,然后响应会给我的浏览器,然后这个cookie通过setMaxAge(606024*10)来设置在我的浏览器上保存的时间
(2)浏览器启用/禁用cookie的方式
在这里插入图片描述
以上为火狐浏览器,点击右上角选项,隐私与安全
(3)浏览器清除cookie的方式
(4)如果是不同的浏览器发送请求,cookie如何处理
cookie不能跨浏览器访问,比如在火狐上访问servlet1,然后响应回一个cookie对象,然后再谷歌上访问servlet2,这是不可以的

session

session概述,执行原理

session是服务器端会话技术
session对象创建完毕后,保存在服务器上
在这里插入图片描述
原理概述:基于上述cookie的原理概述,现在访问政府的人数太多,导致临时工作证不够发,在传达室放了一台电脑,将来访的个人信息存储在电脑上,然后传达室发给我们一张写有编码的纸条,这个编码每一个人都是不同的(相当于身份证号码),当我再次进政府时,根据编码是否匹配,来判定我的身份,这样就不用执行信息,身份验证的操作,这里电脑相当于服务端,我的信息相当于一个session对象,编码相当于JSESSIONID,我就相当于浏览器,因为我的信息存在于电脑中,也就是说session对象存在服务端,所以说是服务端的会话技术,服务器给浏览器响应回一个JESSIONID的过程,就是给浏览器响应回一个cookie对象,其中JSESSIONID是key,JSESSIONID的值是value

session对象的创建及获取
/*
	 * 创建/取得 session对象:
	 * 	HttpSession session = request.getSession();
	 *  对象名:session
	 *  
	 *  如果浏览器和服务器之间维持着一个有效的会话(session),以上代码就是将我们服务器中保存的有效会话(session)直接返回,为取得(服务器已经有的)session对象
	 *  如果浏览器和服务器之间没有一个有效的会话(session),以上代码就是创建一个新的session对象返回.
	 * 
	 *  一个有效的会话,需要同时满足以下条件
	 *  1.浏览器访问时,携带JSESSIONID
	 *  2.服务器中存有session对象
	 *  3.浏览器携带的JSESSIONID和服务器中的session对象的JSESSIONID能够匹配上.
	 * 
	 * 
	 *  一个无效的会话
	 *  浏览器访问时没有携带JSESSIONID
	 *  或者
	 *  服务器中没有一个session对象
	 *  或者
	 *  浏览器携带的JSESSIONID和服务器中的session对象的JSESSIONID没有匹配上
	 * 
	 * request.getSession(true):若存在有效会话则返回该会话,否则新建一个会话。该方法和		request.getSession()的意义一致
	 * request.getSession(false):若存在有效会话则返回该会话,否则返回NULL
	 */
session的常用方法

(1)获取JSESSIONID
getId() String
(2)判断是否是新的session对象
isNew() boolean
(3)session对象的销毁
invalidate()
(4)设置空闲失效时间(空闲失效时间指的是:在这段时间内没有对系统进行操作)
setMaxInactiveInterval(秒)
如果我们没有通过以上代码对session的空闲失效时间进行设置,默认销毁session对象的空闲失效时间走的是tomcat服务器中的配置项.默认30分钟,session对象自动销毁.

conf目录下web.xml
在这里插入图片描述
生活中案例:我们去银行取钱,去过在一段时间内没有操作机器,会自动退卡,因为银行设置的session空闲失效时间非常短,所以会话会失效,对于银行项目来说时间越短越安全,对于一般项目20-30分钟,因为过短会影响用户的体验
(5)域对象存值(专题讲解)
setAttribute(String key,Object value)
(6)域对象取值(专题讲解)
getAttribute(String key) Object

总结session与cookie的关系与区别

在未来的实际项目开发中,我们一般情况下都是使用session会话技术.session对象保存在服务器端的,相对安全.而且方便管理.
session的实现原理,服务器为我们返回JSESSIONID所使用的技术,是cookie的技术.
在遇到特殊需求的时候,比如126的10天免登陆操作,就只能使用cookie技术来完成,session做不到.
为什么session做不到,首先不能关闭浏览器,因为JSESSIONID是存储在浏览器中的,一旦关闭会话失效,需要重新登录,其次,10天内不能执行登录操作,如果执行登录操作,就会破坏session的空闲失效时间,也就不再是10天免登陆了
如果把cookie禁用了,那么session也可以用,怎么用呢?
我们可以通过第一次访问得到JSESSIONID的值,可以看浏览器的响应头信息,然后第二次去访问时,在地址栏的路径后面挂上参数如下所示:
在这里插入图片描述
注意jsessionid要小写,这里不是?而是;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值