JavaEE Servlet Session详解

Session

Session,也称会话状态,Servlet提供了一个HttpSession接口来支持会话状态的维持。Session的发明是为了填补HTTP协议的局限。HTTP协议是如何工作的--用户发出请求,服务器作出响应,这种用户端和服务器端的联系就是离散的,非连续的。HTTP协议不能提供允许服务器跟踪用户请求的功能。在服务器端完成响应用户的请求之后,服务器不能继续与该浏览器继续保持连接。从服务器这端来看,每一个请求都是独立的,因此HTTP协议被认为是无状态协议,当用户在多个主页间切换时,服务器无法知道的身份。 Session的出现就是为了弥补这个局限。利用Session,您就可以当一个用户在多个主页间切换的时候也能保存他的信息。这样很多以前根本无法去做的事情就变得简单多了。

  在访问者从到达某个特定的主页到离开为止的那段时间,每个访问者都会单独获得一个Session。
  Java Servlet定义了一个HttpSession接口,实现的Session的功能,在Servlet中使用Session的过程如下:
  (1) 使用HttpServletRequest的getSession方法得到当前存在的session,如果当前没有定义session,则创建一个新的session,还可以使用方法getSession(true

  (2) 写session变量。可以使用方法HttpSession.setAttribute(name,value)来向Session中存储一个信息。也可以使用HttpSession.putValue(name,value),
但这个方法已经过时了。
  (3)读Session变量。可以使用方法HttpSession.getAttribute(name)来读取Session中的一个变量值,如果name是一个没有定义的变量,那么返回的是null。需要
注意的是,从getAttribute读出的变量类型是Object,必须使用强制类型转换,比如:
  String uid = (String) session.getAttribute("uid");
  也可以使用HttpSession.getValue(name),但是这个方法也已经过时了。
  (4) 关闭session,当时用完session后,可以使用session.invalidate()方法关闭session。但是这并不是严格要求的。因为,Servlet引擎在一段时间之后,自动关闭seesion。


    以上引自:http://www.blogjava.net/gdws/archive/2010/07/02/325039.html

        接下来具体说说Session中一些需要注意的地方:


1.客户端和服务器有对应的SessionID

2.客户端向服务器端发送SessionID的时候两种方式:
   ①使用cookie(内存cookie),如果浏览器禁掉cookie,就不能使用session(使用cookie实现的session)
   ②rewriten URL(URL重写来实现)。就是将一些 额外数据追加到表示会话的每个URL末尾,服务器在该标示符与其存储的有关的该会话的数据之间建立关联。URL后面加入SessionId,如hello.jsp?jsessionid=1234n

    实现方法:response.encodeURL(request.getRequestURL().toString())


    如果想安全的使用session(不论客户端是否禁止cookie),只能使用URL重写(大大增加编程负担),所以很多网站要求客户端打开cookie


3.Session不象Cookie拥有路径访问的问题,同一个application下的servlet/jsp可以共享同一个session, 前提示同一个客户端窗口.


request中关于session的主要方法:

HttpSession session = request.getSession(true);

getSession(boolean isNew):如果会话已经存在,则返回一个HttpSession,如果不存在并且isNew为true,则会新建一个HttpSession

getRequestedSessionId():返回随客户端请求到来的会话ID。可能与当前的会话ID相同,也可能不同。
isRequestedSessionIdFromCookie():当前的Session ID如果是从Cookie获得,为true
isRequestedSessionIdFromURL():当前Session ID如果是由URL获得,为true

isRequestedSessionIdValid():如果客户端的会话ID代表的是有效会话,则返回true。否则(比如,会话过期或根本不存在),返回false


HttpSession的常用方法:

getAttributeNames()

getAttribute()

getCreateTime()
getId()
getMaxInactiveInterval()
invalidate()
isNew()
setAttribute()

setMaxInactivateInterval()






  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值