WEB系统中session的概念及两种实现方式

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); } }
经验分享 程序员 微信小程序 职场和发展