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)转码

                    2URL后面加入SessionId

代码示例:

  1. import java.io.IOException;
  2. import java.io.PrintWriter;
  3. import java.util.Date;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import javax.servlet.http.HttpSession;
  9. public class SessionInfoServlet extends HttpServlet {
  10.     @Override
  11.     protected void doGet(HttpServletRequest request,
  12.             HttpServletResponse response) throws ServletException, IOException {
  13.         // 设置新的Session值,如果参数为false,则页面显示错误
  14.         HttpSession mysession = request.getSession(true);
  15.         PrintWriter pw = response.getWriter();
  16.         response.setContentType("text/html;charset=gb2312");
  17.         pw.println("<html>/n<head>/n<title>显示Session</title>/n</head>/n<body>"
  18.                 + "<h3 color = #00EEFF>Show Session</h3><br>"
  19.                 // 判断session值是否是新值
  20.                 + "Session is new? " + mysession.isNew()
  21.                 + "<br>"
  22.                 // 获取sessionID方法
  23.                 + "SessionID is :" + mysession.getId() + "<br>"
  24.                 + "MySession of Create Time:"
  25.                 // 打印创建Session的时间
  26.                 + new Date(mysession.getCreationTime())
  27.                 + "<br>MySession of Last Access Time:"
  28.                 // 打印最近访问Session的时间
  29.                 + new Date(mysession.getLastAccessedTime()) + "<br>");
  30.         pw.println("<br>Request Information");
  31.         // 获取服务器的SessionID值,第一次是NULL,第二次(刷新后)才能取到值
  32.         pw.println("Request SessionID:" + request.getRequestedSessionId()
  33.                 + "<br>");
  34.         pw.println("SessionID from Cookie:"
  35.         // 判断SessionID值是否来自Cookie
  36.                 + request.isRequestedSessionIdFromCookie() + "<br>");
  37.         pw.println("SessionID from URL:"
  38.         // 判断SessionID值是否来自URL
  39.                 + request.isRequestedSessionIdFromURL() + "<br>");
  40.         // 判断SessionID值是否有效
  41.         pw.println("SessionID is valid:" + request.isRequestedSessionIdValid()
  42.                 + "<br>");
  43.         // 当浏览器不支持Cookie时,可以重写URL访问第一个页提供的SessionID值,则链接到一个新的页面时能继续通过这个SessionID值进行执行
  44.         pw.println("<a href = " + response.encodeURL("SessionInfoServlet")
  45.                 + ">flush" + "</a>");
  46.     }
  47.     @Override
  48.     protected void doPost(HttpServletRequest request,
  49.             HttpServletResponse response) throws ServletException, IOException {
  50.         doGet(request, response);
  51.     }
  52. }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值