• Session机制一(基础知识点)


    一:

    1.介绍

      对于会话与状态管理,有两种方式,cookie与session。

      其中,cookie机制采用客户端保持cookie的方案。

      而,session机制采用的是服务器保持Http状态信息的方案。

      

    2.响应方式

      以cookie的方式进行实现的。

      浏览器打开,对服务器进行访问,这时因为第一次进行访问,所以没有sessionId,所以服务端会新建一个HttpSession,将sessionId以set-cookie的方式将sessionId返回给浏览器,在这次会话中,浏览器进行下次访问服务端时,会以cookie的方式将返回的sessionId带上,与服务端保存的sessionId进行比较,完成下面的会话。

    3.保存sessionId的几种方式

      保存sessionId可以采用cookie,这样交互过程中浏览器可以自动根据规则把这个标识发送给服务器。

      因为cookie会被禁用,因此必须有其他的机制能够把sessionId传递给服务器,经常采用的是URL重写,就是将sessionI附加到URL路径的后面。

    4.Seeion cookie

      session通过SessionId区分不同的客户,以cookie或URL重写为基础的。

      默认使用cookie实现,系统会创造一个名为JSESSIONID的输出cookie,成为session cookie,以区别常说的cookie。

      session cookie是存储在浏览器的内存中,并不写到硬盘上,但是也可以进行持久化写到硬盘。

    5.持久化程序

      在一段时间内再次打开浏览器,SessionId不会变。

     1 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
     2     pageEncoding="ISO-8859-1"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10     <%=session.getId() %>
    11     <%
    12         Cookie cookie=new Cookie("JSESSIONID",session.getId());
    13         cookie.setMaxAge(60);
    14         response.addCookie(cookie);
    15     %>
    16 </body>
    17 </html>

    二:session的生命周期

    1.JSP什么时候不产生session对象

      若当前的JSP是客户端是web应用的第一个资源,切JSP的page指定的session属性值为false。

      当前的JSP不是客户端访问的第一个应用资源,且其他页面已经创建HttpSession对象,则当前的JSP会返回一个会话的HttpSession对象,而不是创建一个新的HttpSession对象。

    2.Servlet什么时候产生session对象

      若servlet是客户端访问的第一个web应用资源,则只用调用了request.getSession()或者request.getSession(true)才会创建HttpSession对象。

    3.session=“false”

      当前页面禁用HttpSession隐含对象。

      但是可以通过request.getSession(boolean flag),若flag为false,若没有和当前JSP页面关联的HttpSession对象,则返回null,若有,返回true。

    若flag为true,若没有和当前JSP页面关联的HttpSession对象,则一定返回一个新创建的HttpSession,有,则直接返回。

    4.销毁HttpSession

      调用session.invalidate(),该方法使HttpSession马上失效。

      服务器卸载当前应用。

      超出过期时间,以秒为单位,默认半个小时,可是设置,session.setMaxInactiveInterval(60)。

      注:不是关闭浏览器就关闭了HttpSession。

    三:案例(重新登录与注销)

    1.login.jsp

     1 <%@ page language="java" contentType="text/html; charset=utf-8"
     2     pageEncoding="utf-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10     SessionId:<%=session.getId() %><br><br>
    11     SessIsNes:<%=session.isNew() %><br><br>
    12     MaxInactiveInternal:<%=session.getMaxInactiveInterval() %><br><br>
    13     createTime:<%=session.getCreationTime() %><br><br>
    14     LastAccessTime:<%=session.getLastAccessedTime() %><br><br>
    15     <%
    16         Object username=session.getAttribute("userName");
    17         if(username==null){
    18             username="";
    19         }
    20     %>
    21     
    22     <form action="hello.jsp" method="post">
    23         userName:<input type="text" name="userName" 
    24             value="<%=username%>"/>
    25         <input type="submit" value="Submit"/>
    26     </form>
    27 </body>
    28 </html>

    2.hello.jsp

     1 <%@ page language="java" contentType="text/html; charset=utf-8"
     2     pageEncoding="utf-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10     SessionId:<%=session.getId() %><br><br>
    11     SessIsNes:<%=session.isNew() %><br><br>
    12     MaxInactiveInternal:<%=session.getMaxInactiveInterval() %><br><br>
    13     createTime:<%=session.getCreationTime() %><br><br>
    14     LastAccessTime:<%=session.getLastAccessedTime() %><br><br>
    15     Hello:<%=request.getParameter("userName") %><br><br>
    16     
    17     <%
    18         session.setAttribute("userName", request.getParameter("userName"));
    19     %>
    20     <a href="login.jsp">重新登录</a>&nbsp;&nbsp;
    21     <a href="loginOff.jsp">注销</a>    
    22     
    23 </body>
    24 </html>

    3.loginOff.jsp

     1 <%@ page language="java" contentType="text/html; charset=utf-8"
     2     pageEncoding="utf-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10     SessionId:<%=session.getId() %><br><br>
    11     SessIsNes:<%=session.isNew() %><br><br>
    12     MaxInactiveInternal:<%=session.getMaxInactiveInterval() %><br><br>
    13     createTime:<%=session.getCreationTime() %><br><br>
    14     LastAccessTime:<%=session.getLastAccessedTime() %><br><br>
    15     ByBye:<%=request.getAttribute("userName") %><br><br>
    16     <a href="login.jsp">重新登录</a>&nbsp;&nbsp;
    17     <%
    18         session.invalidate();
    19     %>
    20     
    21     
    22 </body>
    23 </html>

    4.效果

      

    四:URL重写

    1.方式

      一种补充的会话管理机制,它允许不支持Cookie的浏览器也可以与WEB服务器保持连续的会话。

      HttpServletResponse里定义了两个用于完成URL重写的方法

      encodeURL方法

      encodeRedirectURL方法

      上面的两种方式都一样。

    2.encodeURL方式

      

    五:

      

  • 相关阅读:
    虚方法、重写方法以及抽象类的知识小结
    DateTime时间格式
    JavaScript中Eval()函数的作用
    JQuery Event属性说明
    正则表达式30分钟入门教程
    dwz的form表单中url的变量替换
    dwz中权限的控制
    Dwz下拉菜单的二级联动
    Win7下用IIS发布网站
    IntelliJ IDEA 常用快捷键列表及技巧大全
  • 原文地址:https://www.cnblogs.com/juncaoit/p/7442115.html
Copyright © 2020-2023  润新知