会话技术概念:
会话技术:http是无状态的,不能区分客户端.帮助服务器区分客户端的
浏览器打开客户端访问服务器到浏览器关闭这是一次回话;
- 存客户端数据
- 把客户端数据存到服务器上:session
- 把客户端数据存到客户端上:cookie
- sessioncookie区别
- session是存到服务器的,cookie是存到客户端的
- 把密码存到cookie上相对于不安全(比如在网吧上网他是存在本地的),存在session上只有你自己可以看到相对于安全
- cookie会对于服务器压力小一些安全性不好,所以Session会存到服务器上安全性好,增加服务器的压力
cookie:
默认cookie是会话级别的;
cookie里面的五个属性:name,value,domin(域的限制,限制域名的请求)cookie,maxAge(过期时间) path(获取请求的路径,访问哪些会请求cookie) httpOnly(给true或false默认false) 给true 只能浏览器自己才能操作cookie.falsejs代码可以操作不安全有可能出现跨站攻击
- 服务器将一个cookie写给客户端,他是以hppt头的方式传输的,服务端访问客户端默认会携带cookie
服务器创建cookie
API Cookie cookie= new Cookie(String cookieName,cookieValue);
服务器向客户端发送cookie
API response.addCookie(Cookie cookie);
- 服务器获取客户端携带的cookie
设置cookie的持久时间(存到浏览器位置磁盘,不同浏览器存放的位置不同);
API cookie.setMaxAge(int seconds)时间 秒
访问某个资源是携带cookie访问某个资源不携带(设置访问cookie的携带路径)
如果不设置携带路径,会在访问该cookie产生的路径下
cookie.setPath(String path)
删除cookie
创建cookie覆盖要删除的cookie
将path设置成要删除的cookie的path一致
cookie.setMaxAge(int seconds)时间设置为0;
获取客户端携带的cookie;
获取所有cookie
Cookie[] cookie = request.getCookies();
通过cookie的名称去获得想要的cookie
for(Cookie cookie : cookies){
获得cookie名称
String cookieName= cookie.getName();
if(cookieName!=null){
if(cookieName.equals("xxx")){
String cookieValue(外部变量) = cookie.getValue();
}
}
}
session:session技术是基于cookie--cookie会存储session编号--JESSIONID
创建(获得)属于一该客户端的私有的session区域
//判断该客户端在我的服务器已经存在session了,不存在就会创建一个新的session对象,反之就会获取已经存在的session给用户返回
HttpSession sesion = request.getSession();这个代码保证sesion永远不为空,肯定有这个区域;
获取Sessionid
String sessionId= sesion.getId;
发送编号根据编号(JSESESSIONID)去寻找session区域的位置,是服务端和客户端自动完成的不需要手动编码
如果客户端将Cookie信息清除了,原先的session区域还存在,只是找不到了,它自己有根据新的JSESESSIONID重新创建一个区域;
操作session区域:和Cookie一致
session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name)
- session对象的生命周期
第一次执行request.getSession();创建
销毁:
1)服务器关闭;
2)session过期失效默认30分钟(他的计时默认是你最后一次操作该服务器开始);服务器默认配置的;
- 1.tomcat中apache-tomcat-8.0.26\conf\web.xml中设置
<session-config>
<!-- 时间单位为分钟 -->
<session-timeout>30</session-timeout>
</session-config>
- 2.java代码
//以秒为单位
session.setMaxInactiveInterval(30*60);
- 3.在项目工程的web.xml中设置
<session-config>
<!-- 时间单位为分钟 -->
<session-timeout>15</session-timeout>
</session-config>
3)手动销毁session.invalidate();