首页 > 代码库 > 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获得,为true12isRequestedSessionIdFromURL():当前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