JSP内置对象(二下)session对象

session对象

session对象在第一个JSP页面被装载时自动创建,完成会话期管理。
从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。
当客户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要session对象。
session对象是HttpSession类的实例。

  • 常用方法:

    1. public void setAttribute(Sting name, Object value),设定指定名字的属性的值,并将它添加到session会话范围内,如果这个属性是会话范围内存在,则更改该属性的值。

    2. public Object getAttribute(String name),在会话范围内获取指定名字的属性的值,返回值类型为object,如果该属性不存在,则返回null。

    3. public void removeAttribute(String name),删除指定名字的session属性,若该属性不存在,则出现异常。

    4. public void invalidate(),使session失效。可以立即使当前会话失效,原来会话中存储的所有对象都不能再被访问。

    5. public String getId( ),获取当前的会话ID。每个会话在服务器端都存在一个唯一的标示sessionID,session对象发送到浏览器的唯一数据就是sessionID,它一般存储在cookie中。

    6. public void setMaxInactiveInterval(int interval),设置会话的最大持续时间,单位是秒,负数表明会话永不失效。

    7. public int getMaxInActiveInterval(),获取会话的最大持续时间。

    8. 使用session对象的getCreationTime()和getLastAccessedTime()方法可以获取会话创建的时间和最后访问的时间,但其返回值是毫秒,一般需要使用下面的转换来获取具体日期和时间。
      Date creationTime = new Date(session.getCreationTime());
      Date accessedTime = new Date(session.getLastAccessedTime());

  • 实例:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="java.text.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'session_page_1.jsp' starting page</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>

  <body>
    <h1>session内置对象</h1>
    <hr>
    <%SimpleDateFormat sdf = new SimpleDateFormat("yyyy年mm月dd日 HH:MM:ss");
    Date d = new Date(session.getCreationTime());
    session.setAttribute("password","12345");
    session.setAttribute("username","admin");%>
    Session创建时间:<%=sdf.format(d) %><br>
    Session的ID:<%=session.getId() %><br>
    从Session中获取用户名:<%=session.getAttribute("username") %><br>

    <%
    // 设置当前session最大生成期限,单位秒
     //session.setMaxInactiveInterval(10);%>
    <%
    //销毁session
    //session.invalidate(); %>

    <a href="session_page_2.jsp" target="_blank">跳转到Session_page_2.jsp页面</a>
  </body>
</html>

session_page_2.jsp页面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'session_page_2.jsp' starting page</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>

  <body>
    Session的ID:<%=session.getId() %><br>
    从Session中获取用户名:<%=session.getAttribute("username") %><br>
    Session中保存的属性有:<%
        for(int i = 0 ; i < session.getValueNames().length;i++){
            out.println(session.getValueNames()[i]);
            out.println("&nbsp;&nbsp");
        }
     %>
  </body>
</html>
  • Session的生命周期:

    1. 创建:
      当客户第一次访问某个jsp或者servlet时候,服务器会为当前会话创建一个SessionId,每次客户端向服务器发送请求时,都会将此SessionId携带过去,服务器端会对此SessionId进行校验。
    2. 活动:
      某次会话当中通过超链接打开的新页面属于同一会话。
      只要当前会话没有全部关闭,重新打开新的浏览器窗口访问同一项目资源时属于同一会话。
      除非本次会话的所有页面都关闭后再重新访问某个jsp或servlet将会创建新的会话。
      注意:注意原有会话还存在只是这个旧的SessionId仍然存在于服务器,只不过再也没有客户端会携带它然后交予服务器校验。
    3. 销毁:
      a.调用Session.invalidate();
      b.session过期(超时)
      tomcat默认超时时间30分钟
      1.session.setMaxInactiveInterval(时间);//单位秒
      2.在web.xml配置:
<session-config>
    <session-timeout>10
    </session-timeout>
</session-config>//单位分钟

c.服务器重新启动

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章