Session
1、 在某段时间一连串客户端与服务器的“交易”
2、 在JSP/SERVLET中,如果浏览器不支持Cookie,可以通过URL重写来实现,就是将一些额外数据追加到表示会话的每个URL末尾,服务器在该标示符与其存储的有关的该会话的数据之间建立关联。如hello.jsp?jsessionid = 1234
3、 可以通过程序来终止一个会话。如果客户端在一定时间内没有操作,服务器会自动终止会话。
4、 通过HttpSession来读写Session
5、 Session值永远是独一无二的,若新开一窗口(非本窗口的子窗口)session值立即改变
规则:
1、 如果浏览器支持Cookie,创建Session的时候会把SessionID保存在Cookie里
2、 Session不象Cookie拥有路径访问的问题
同一个application下的servlet/jsp可以共享同一个session,前提是同一个客户端窗口
3、 如果不支持Cookie,必须自己编程使用URL重写的方式实现Session
3.1、用到的函数:response.encodeURL(String args0)
作用:(1)转码
(2)URL后面加入SessionId
代码示例:
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.util.Date;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- public class SessionInfoServlet extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- // 设置新的Session值,如果参数为false,则页面显示错误
- HttpSession mysession = request.getSession(true);
- PrintWriter pw = response.getWriter();
- response.setContentType("text/html;charset=gb2312");
- pw.println("<html>/n<head>/n<title>显示Session</title>/n</head>/n<body>"
- + "<h3 color = #00EEFF>Show Session</h3><br>"
- // 判断session值是否是新值
- + "Session is new? " + mysession.isNew()
- + "<br>"
- // 获取sessionID方法
- + "SessionID is :" + mysession.getId() + "<br>"
- + "MySession of Create Time:"
- // 打印创建Session的时间
- + new Date(mysession.getCreationTime())
- + "<br>MySession of Last Access Time:"
- // 打印最近访问Session的时间
- + new Date(mysession.getLastAccessedTime()) + "<br>");
- pw.println("<br>Request Information");
- // 获取服务器的SessionID值,第一次是NULL,第二次(刷新后)才能取到值
- pw.println("Request SessionID:" + request.getRequestedSessionId()
- + "<br>");
- pw.println("SessionID from Cookie:"
- // 判断SessionID值是否来自Cookie
- + request.isRequestedSessionIdFromCookie() + "<br>");
- pw.println("SessionID from URL:"
- // 判断SessionID值是否来自URL
- + request.isRequestedSessionIdFromURL() + "<br>");
- // 判断SessionID值是否有效
- pw.println("SessionID is valid:" + request.isRequestedSessionIdValid()
- + "<br>");
- // 当浏览器不支持Cookie时,可以重写URL访问第一个页提供的SessionID值,则链接到一个新的页面时能继续通过这个SessionID值进行执行
- pw.println("<a href = " + response.encodeURL("SessionInfoServlet")
- + ">flush" + "</a>");
- }
- @Override
- protected void doPost(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- doGet(request, response);
- }
- }