文章目录
会话技术的概述
- 用户打开一个浏览器,点击多个超链接访问服务器的web资源,然后关闭浏览器,整个过程成为一次会话。
- 每个用户和服务器进行交互过程中,产生一些各自的数据,程序想要把这些数据进行保存,就需要使用会话技术。
会话跟踪实现方式
- 常用的会话跟踪技术有四种
- URL方式(get):需要保存的信息直接追加到URL后
- 例如:http://127.0.0.1:8080/chapter03/viewList?pageNo=12
- 隐藏域方式(post):可以使用表单中的隐藏域保存相关信息
- 例如:<input type=“hidden” name=“status" value=“true">
- Session方式:将状态信息保存到服务器的会话对象中,通过唯一标记的ID值与客户端进行绑定使用
- 例如访问控制功能就可以使用Session实现
- Cookie方式:将状态信息保存到客户端,服务器能够获得相关信息进行分析,从而生成对客户端的响应
- 例如简化登录功能就可以使用Cookie实现
- URL方式(get):需要保存的信息直接追加到URL后
会话技术的实现原理
- cookie:cookie是客户端技术,程序把每个用户的数据以cookie的形式存到各自的浏览器中。当用户使用浏览器再次访问服务器中的web资源的时候,就会带着各自的数据过去。这样,web资源处理的就是用户各自的数据了。
- session:session是服务器端技术,利用这个技术,服务器在运行的时候为每一个用户创建一个独享的session对象。由于session为用户浏览器独享,所有用户在访问服务器的时候,可以把各自的数据放在各自的session中,当用户再次访问服务器中的web资源时,其他web资源再从用户各自的session中取出数据为用户服务。
Cookie分类
-
默认级别的Cookie
指没有设置有效时间的Cookie,默认的情况下只要关闭了浏览器,Cookie也会被销毁。(Cookie存在于浏览器的内存中,当关闭了浏览器Cookie就销毁了。) -
持久级别的Cookie
指有有效时间的Cookie,这种Cookie的内容不是保存在浏览器的内存中,而是保存在本地硬盘上。 -
Cookie的使用细节
- 一个cookie只用标识一种信息,至少含有一个标识该信息的名称和值;
- 一个web站点可以给一个浏览器发送多个Cookie,一个浏览器可以存储多个web站点的Cookie;
- 浏览器存放的cookie的大小和个数是有限制的;
- 默认被创建的cookie是会话级别的,关闭浏览器则摧毁;
- 需要手动删除持久性的Cookie,可以将有效时长改为0,注意:path需一致,否则无法删除。
Cookie主要属性
- name:cookie的名字,每个cookie都有一个名字;
- content:cookie的值,与名字一起作为键值对形式存在;
- domain:域,该cookie的域名,例如youkuaiyun.com,说明当前cookie来自youkuaiyun.com;
- path:路径,访问youkuaiyun.com下该路径时,当前cookie将被发送;
- created:cookie被创建的时间;
- Expired:cookie失效的时间;
- MaxAge:失效时间和创建时间的时间差,就是cookie的最大生命时间,超过该时间,cookie将失效,不再被发送到相应的域地址;
Cookie操作(java部分)
- 写cookie
//创建/修改cookie对象,键值对形式
Cookie cookie = new Cookie("username", "admin");
//设置过期时间 单位秒,删除Cookie只需要修改过期时间为负数
cookie.setMaxAge(60*60);
//cookie还可以设置path等信息
//cookie对象存入response,响应给浏览器,浏览器接受到响应数据时才会把cookie存储在本地
response.addCookie(cookie);
- 读cookie
//从request对象中取值
Cookie[] cookies = request.getCookies();
//循环输出值
for(Cookie cookie : cookies){
//键: cookie.getName()
//值: cookie.getValue()
// cookie的其他属性path等,控制台读取不到。
}
- 删除cookie
- 设置最大有效时间为0,删除;设置最大有效时间为负数,cookie的有效期为session。
Cookie操作(js部分)
- Cookie写
document.cookie="jscook=jsval1;path=/;expires="+new Date("2021-11-11 11:11:11");
- Cookie读
var cookie = document.cookie
//读到键值对格式的字符串 如果需要找到特定key的value需要手动解析
var mycks = document.cookie.split(";");
$.each(mycks,function(i,d){
var kvarr = d.split("= ");
console.log("key是:"+ kvarr[0]+" value是:"+kvarr[1]);
})
- 删除cookie
// 设置时间为上一秒
document.cookie="jskey=jsval;expires="+new Date(now.getTime()-1000).toGMTString();
// 设置为一个过去的时间
document.cookie="jskey=jsval;expires="+new Date("1969-11-11 11:11:11");
注意:cookie在使用时,相同domain,不同path下可以存储同名cookie,为了让cookie设置统一,和解决cookie读取权限问题,经常会把cookie的path直接设置到根/
Web storage使用
- HTML5 提供了两种在客户端存储数据的新方法 统称Web storage:
- localStorage - 没有时间限制的数据存储
- sessionStorage - 针对一个 session 的数据存储,数据在浏览器关闭后自动删除
- Web storage是一种设计由前端存储数据的技术,跟cookie有相似之处,但是因为设计给前端使用,所以操作上比cookie方便很多
- Web storage操作
localStorage.setItem("user", "user_name");//设置值
console.log(localStorage.getItem("user"));//取值
localStorage.username = "admin";//设置值
console.log(localStorage.username)//取值
//以上两种方式存值/取值都可以
localStorage.removeItem("user");//移除指定的key
localStorage.clear();//清空所有的数据
注意:sessionStorage用法同localStorage;
Web storage是前端的技术,跟服务端的session对象无直接关系;
Web storage没有默认随请求发送到服务器的机制,传值使用链接拼接或者隐藏框。
Session概述
- Session与cookie的区别
-
Session没有个数和大小的限制
-
数据是保存在服务器上的(相对安全)
-
- Session如何保存用户数据
Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到Session对象。
- Session的实现原理
是基于Cookie的,基与Cookie回写了一个Session的id。
- Session做为域对象存取数据
- 存入:SetAttribute
- 取出:GetAttribute
- 移除:RemoveAttribute
- 作用范围:一次会话。指的是用户打开浏览器访问服务器资源,到最后关闭浏览器的过程。
Servlet的数据访问范围的总结
- Servlet域对象的总结
- 请求范围(ServletRequest)
- 何时创建和销毁的:请求创建,响应销毁。
- 如何存取数据:传值类型为object。
- 作用范围:一次请求。
- 会话范围(HttpSession)
- 何时创建和销毁的:服务器端第一次调用getSession()方法即创建。销毁:①Session过期,默认过期时间为30分钟;②非正常关闭服务器;③手动调用session.invalidate()。
- 如何存取数据:传值类型为object。
- 作用范围:一次会话。
- 应用范围(ServletContext)
- 何时创建和销毁的:服务器启动时创建,为每个web项目创建一个单独的ServletContext对象。销毁:服务器关闭时,或者项目从服务器中移除。
- 如何存取数据:传值类型为object。
- 作用范围:整个web项目。
- 请求范围(ServletRequest)