首页 > 代码库 > javaEE session详解

javaEE session详解

1也可以记录状态信息,与cookie不同,cookie是记录在客户端的,session是记录在服务器端的。

2session是服务器哦开辟的一块内存,session是与浏览器(或子窗口)关联在一起的,其他浏览器访问不了。

3原理:在第一次访问服务器的时候,服务器会创建一个SessionID,会在服务器的Session内存里保存SessionID,然

后把这个SessionID通过response返回给浏览器(浏览器就获得了这个SessionID),在第二次访问服务器,浏览器通

过request提供这个SessionID,服务器就知道你所在的Session了,而不会访问到其他Session。

4在某段时间一连串客户端与服务器的“交易”,在不同的jsp页面中保留客户信息的情况下使用。

5Session的两种方式,一种使用cookie实现(把SessionID放在临时Cookie里面),二如果浏览器不支持cookie,可以通

过url重写来实现,就是将一些额外数据追加到表示会话的每个url末尾,服务器在该标识符与其存储的有关的该会话的

数据之间建立关联,如:hello.jsp?jsessionid=1234。

6可以通过程序来终止一个会话。如果客户端在一定时间内没有操作,服务器会自动终止会话。

7通过HttpSession来读写Session。

8规则:

       如果浏览器支持Cookie,创建Session的时候会把SessionID保存在Cookie里面

       如果不支持cookie,使用url重写的方式实现Session,response.encodeURL():转码,并在RUL后面加入

SessionID。

       session不像cookie拥有路径访问的问题,session同一个application下的servlet/jsp可以共享同一个session,前提

是同一个浏览器窗口。只要是同一个application下建立的session就可以访问。

9创建Session:

       HttpSession session = request.getSession(true);//如果没有session创建一个,如果有session就拿到原来那个。

10getRequestedSessionId(),返回随客户端请求到来的会话ID,可能与当前的会话ID相同,也可能不同。

11isRequestedSessionIdFromCookie():当前的Session ID如果是从Cookie获得,为true

12isRequestedSessionIdFromURL():当前Session ID如果是由URL获得,为true

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

本不存在),则返回false

14HttpSession的常用方法:

    getAttrubuteNames()/getAttribute()

    getCreateTime()

    getId()

    getMaxInactiveInterval()

    invalidate()

    isNew()

    setAttrubute()

    setMaxInactivateInterval()

15在jsp中使用session,只要直接使用session就可以了,在第一次使用session时就会为你创建一个session。

16URL重写跟踪会话:服务器将Session ID作为RUL的一部分发送给客户端,客户端在请求URL中再传回来,这样,

web服务器就可以跟踪会话了。

要跟踪客户端的会话,就需要将所有发往客户端的URL进行编码,这可以通过HttpServletResponse接口中的

encodeURL()方法和encodeRedirectURL()方法来实现,其中,encodeRedirectURL()方法主要是在调sendRedirect()

方法之前使用。

只需要对所有的链接和重定向语句中的URL都调用encodeURL()和encodeRedirectURL()进行编码就可以了,这

两个方法在执行时,首先判断当前的servlet是否执行了HttpSession对象的invalidate()方法,如果执行了,直接返回参

数URL,接下来判断客户端是否禁用了Cookie,如果没有禁用,则直接返回参数URL,如果禁用了Cookie,则在参数

URL中附加Session ID,返回编码后的URL