发布网友 发布时间:2024-09-25 15:15
共1个回答
热心网友 时间:2024-10-05 12:23
本文介绍Http请求中会话跟踪技术Session和Cookie的使用。
概念介绍由于http协议最初被设计成是无状态的,所以用户每次发起http请求都会新起一个连接(即便是同一个用户,同一个域名),这样十分消耗资源,所以需要有一种技术来处理这个问题,会话跟踪就是这种技术。
会话:用户打开浏览器,访问服务器资源,会话建立,直到有一方断开,会话结束。一次会话中可以包含多次请求和响应。
会话跟踪:一种维护浏览器状态的方法,服务器需要识别请求是否来自于同一个浏览器,以便于在同一次会话中共享数据,用于提升性能
会话跟踪技术实现方式:
客户端:Cookie
服务端:Session
关于CookieCookie是使用在客户端的一种会话跟踪技术,会将数据保存到客户端,以后每次请求都携带Cookie进行数据访问。
举个例子,我们在用户登录时服务端会生成token,然后服务端把token设置到cookie中,客户端后续对同一个域名的请求都会带上这个Cookie,默认情况下当用户关闭浏览器(即会话断开后)cookie会失效。
Servlet中Response设置Cookie代码如下:
resp?.addCookie(Cookie("名字","值"))Servlet获取客户端Cookie代码如下:
val?cookies?=?req.cookies?//Cookie对象数组cookies.forEach?{?????val?name?=?it.name????val?value?=?it.value}Cookie原理Cookie实现是基于http协议,主要是用了http协议中的headers
响应头:set-cookie
请求头:cookie
服务端会往响应头里加一个set-cookie字段,浏览器会在请求头里加一个cookie字段,下面介绍Cookie的一些细节。
Cookie的一些细节Cookie存活时间
正数:Cookie存入电脑硬盘,持久化存储,到期自动删除
负数:Cookie仅存在浏览器内存里,浏览器关闭时被销毁
0:删除对应Cookie
默认情况下,Cookie存储在浏览器内存里,当浏览器关闭,内存释放,Cookie会被销毁
可以使用setCookie(int seconds)设置Cookie的存活时间
Cookie如何存储中文
设置Cookie时先转码,之后取的时候在反编码即可(一般使用URLEncoder类)
关于SessionSession是一种服务端会话跟踪技术,用于将数据存储到服务端.
Session的使用JavaEE提供HttpSession接口来实现Session的具体功能,HttpSession有以下几个方法:
val?session?=?req.session//获取数据session.getAttribute("")//设置数据session.setAttribute("","")//移除数据session.removeAttribute("")Session的原理Session是基于Cookie实现的,在同一次会话中cookie中的JSESSIONID是同一个。
Tomcat服务器会自动处理sessionid过程
同一个域名服务器下Servlet的请求获取到的session对象是同一个。
Session使用细节Session的钝化和活化
服务器重启后,Session中的数据是否还在?
钝化:服务器正常关闭时会把session的信息存储到硬盘文件里
活化:再次启动服务器会从文件中加载数据到session中
浏览器关闭后再打开是一次新的会话
Session销毁
默认情况保存30分钟,这个值可以在web.xml中使用<session-config>下的<session-timeout>属性配置(默认单位是分钟)
手动调用Session对象的invalidate方法(用户退出时可以使用)
总结Session与Cookie都是用来一次会话里多次请求共享数据的
区别:
存储位置:Cookie在客户端,Session在服务端
安全性:Cookie不安全,Session安全
数据大小:Cookie最大3KB,Session无限制
存储时间:Cookie可以存很久,Session默认30分钟
服务器性能:Cookie不占服务端资源,Session占用资源