会话状态的维持有多种方法,可以使用Cookies,hidden类型的表单域,或直接把状态信息加到URL中。还有Servlet本身提供了一个HttpSession接口来支持会话状态的维持。从服务器这端来看,每一个请求都是独立的,因此HTTP协议被认为是无状态协议,当用户在多个主页间切换时,服务器无法知道他的身份。利用Session,一个用户在多个主页间切换的时候就可以保存他的信息了。每个访问者从到达某个特定的主页,在个主页面间跳转,到最后离开为止的这段时间,都会单独获得并使用一个Session。
在Servlet中使用Session的过程如下:
(1)使用HttpServletRequest的getSession方法得到当前存在的session,如果当前没有定义session,则创建一个新的session。
(2)写session变量。可以使用方法HttpSession.setAttribute(name,value)来向Session中存储一个信息。
(3)读Session变量。可以使用方法HttpSession.getAttribute(name)来读取Session中的一个变量值,如果name是一个没有定义的变量,那么返回的是null。需要注意的是,从getAttribute读出的变量类型是Object,必须使用强制类型转换,比如:String name = (String) session.getAttribute("uname");
(4)关闭session,当时用完session后,可以使用session.invalidate()方法关闭session。但是这并不是严格要求的。因为,Servlet引擎在一段时间之后,自动关闭seesion。
Session的removeAttribute和invalidate方法的区别:
session.removeAttribute()适用于清空指定的属性。
session.invalidate()是清除当前session的所有相关信息,session.invalidate()是让当前浏览器的session销毁,也就是一个session被销毁,比如用户登录后注销就用这个,因为注销意味着该用户session中的所有属性均失效。