会话技术:在Web开发中,服务器跟踪用户信息的奇数称为会话技术。
会话:指的是一个客户端(l浏览器)与Web服务器之间连续发生的一系列请求和响应的过程。
由于请求包含的信息,在请求被销毁后也就不复存在,那么,多次让用户输入账号密码,会影响用户的使用体验感,基于此,产生了cookie和session技术。
cookie技术及其学习:
cookie是一种会话技术,它用于将会话过程中的数据保存在用户的浏览器中,从而使浏览器和服务器可以更好地进行数据交互。
cookie学习:
作用:解决了发送的不同请求的数据共享问题。
使用:
cookie的创建和存储
//创建cookie对象
Cookie c=new Cookie(String name,String value);
//设置cookie(可选,可设置最长有效期和设置有效路径)
//设置有效期,括号里面是秒数,即是该cookie对象的最大生命值
c.setMaxAge(int seconds);
//设置有效路径,即该cookie对象只对于该路径下的目录以及其子目录有效
c.setPath(String uri);
//cookie对象的获取
//获取cookie对象的信息数组
Cookie[] cks=new req.getCookies();
//遍历数组获得cookie信息,利用for循环进行遍历即可
if(cks!=null)//先判定cks数组非空,才能继续循环,避免出现空指针异常
{
for(Cookie c:cks)
{String name=c.getName();
String value=c.getValue();
System.out.println(name+":"+value);
}
}
注意:
一个Cookie对象只能存储一条数据,如果想要存储多条数据,需要创建多个Cookie对象。
Cookie技术的特点:
1.这是一种浏览器端的数据存储技术。
2.存储的数据声明在服务器端,
临时存储:数据存储在浏览器的运行内存中,浏览器关闭cookie对象即销毁,数据将会失效
定时存储:设置了cookie的有效期,存储在客户端的硬盘中,在有效期内符合路径要求的都会附带该信息。
3.默认cookie信息存储好后,每次请求都会附带,除非设置有效路径。设置了有效路径之后,该cookie只对当前访问路径所属的目录及其子目录有效。
session技术及其学习:
session对象是一种将会话数据保存到服务器端的技术。当浏览器访问Web服务器时,Servlet容器就会创建一个Session对象和ID属性,其中,Session对象就相当于病历档案,ID就相当于就诊卡号。
session技术是依赖于cookie技术的服务器端的数据存储技术,由服务器进行创建。
每个用户独立拥有一个session,即每一次请求都拥有一个session,它的默认存储时间是30分钟(可以修改)。
使用:
1.创建session对象
2.存储数据到session对象
3.获取session对象
4.从session对象中获取数据
注意:只要不关闭浏览器,并且session不失效的情况下,同一个用户的任意请求在项目中的任意Servlet中获取的都是同一个session对象。
作用域:一次会话 //或者说是在JSESSIONID和SESSION对象不失效的情况下,在整个项目内都有用。
session技术学习:
问题:一个用户的不同请求的数据共享怎么办?
解决:使用session技术
原理:用户第一次访问服务器,服务器会创建一个session对象给此用户,并将session对象的JSESSIONID使用cookie技术存储到浏览器中,保证用户的其他请求能够获取到同一个session对象,也保证了不同请求能够获得共享的数据。
特点:
1.存储在服务器端
2.服务器进行创建
3.依赖cookie技术
4.作用域(一次对话)
5.默认时间是30分钟
作用:解决了一个用户的不同请求的数据共享问题。
使用:创建session对象/获取session对象
HttpSession hs=req.getSession();
作用:
1.如果请求中拥有session对象的标识符也就是‘’’JESSIONID,则返回其对应的session对象
2.如果请求中没有session的标识符也就是JSESSIONID,则创建session新的session对象,并将其JSESSIONID作为cookie数据存储到浏览器中内存中。
3.如果session对象失效了(不管JSESSIONID存不存在),也会重新创建一个对象,并将其JSESSIONID存储到浏览器内存中。
设置session存储时间:
hs.setMaxInactiveInterval(int seconds);//括号里面是秒数的整数。
注意:
1.在指定的时间内session对象没有使用则销毁,如果使用了则重新计时
2.JSESSIONID存储在了cookie临时存储空间中,浏览器关闭即失效。
设置session失效:
hs.invlidate();
//执行这个方法后,session对象立马失效。
使用时机:一般用户在登录web项目时会将用户的个人信息存储到session中,供该用户的其他请求使用。
总结:session解决了一个用户的不同请求的数据共享问题,只要在JSESSIONID和SESSION对象不失效的情况下,用户的任意请求在处理时都能获得到同一个session对象。
session对象失效处理:将用户请求中的JSESSIONID和后台获取的SESSIONID进行比对时,如果一致则session没有失效,如果不一致则证明失效了,重定向到登录页面,让用户重新登录。
关于session的默认时间为30分钟的问题:
(也是session如何进行超时管理的解决办法)
1.可以自己设置session的有效时间,方法为
hs.setMaxInactiveInterval(int seconds);
//里面设置的是有效的秒数
2.在tomcat的cof文件夹下的web.xml文件中找出
<session-config><session-tmeout>30</session-tmeout></session-config>
这里设置有效时间,这个数字的单位是分钟。