Java web 会话及其会话技术总结

  • Post author:
  • Post category:java


会话技术:在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>

这里设置有效时间,这个数字的单位是分钟。



版权声明:本文为weixin_44750790原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。