欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JSP_session会话跟踪

程序员文章站 2022-03-14 23:47:14
...

JSP_session会话跟踪

  1. HTTP是一种“无状态”协议,这意味着每次客户端检索一个Web页面时,客户机打开与Web服务器的单独连接,并且服务器自动不保留先前客户端请求的任何记录。

web客户端于服务器之间的会话

cookie

  1. 网络服务器可以将唯一的会话ID作为cookie分配给每个Web客户端,并为客户端提供后续请求,并使用接收到的cookie进行识别。
  2. 但是浏览器有时候并不支持cookie

隐藏表单字段:

  1. web服务器可以发送隐藏的html表单域以及唯一的会话ID:<input type = "hidden" name = "sessionid" value = "123456">,
  2. 当提交表单时,指定的名称和值将自动包含在GET或POST数据中。 每次Web浏览器发送请求时,
  3. session_id值都可以用于跟踪不同的Web浏览器,但点击常规(<a href="...">)超文本链接不会产生表单提交,因此隐藏表单字段也不能支持常规会话跟踪。

网址重写

  1. 在每个网址的末尾附加一些额外的数据。该数据标识会话; 服务器可以将该会话标识符与其关于该会话存储的数据相关联。
  2. 例如,使用URL:http://www.baidu.com/file.html;sessionid=123456789,会话标识符作为sessionid=123456789附加,可以在Web服务器*问以识别客户端。
  3. URL重写是一种更好的方法来维护会话,并且在浏览器不支持cookie时可以使用它们。 这里的缺点是,必须动态生成每个URL来分配会话ID,而页面是一个简单的静态HTML页面。

session对象

  1. JSP还使用了提供HttpSession接口的servlet。
  2. HttpSession接口的servlet接口提供了一种识别用户的方法:一个请求页或访问网站或存储有关用户的信息
  3. 默认情况下,JSP启用会话跟踪,并为每个新客户端自动实例化一个新的HttpSession对象。 禁用会话跟踪需要通过将页面指令会话属性设置为false来明确地将其关闭,如下所示:
<%@ page session = "false" %>
  1. JSP引擎通过隐式会话对象将HttpSession对象公开给JSP程序员。由于会话对象已经提供给我们,我们可以立即开始从对象中存储和检索数据,而无需任何初始化或getSession()。

JSP_session会话跟踪实例

  1. 使用HttpSession对象来查找会话的创建时间和最后访问的时间。如果尚不存在,会将新建会话与请求相关联。

index.jsp内容如下

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*"%>
<%
    
    Date createTime = new Date(session.getCreationTime());
    Date lastAccessTime = new Date(session.getLastAccessedTime());

    String title = "Welcome Back to my website";
    Integer visitCount = new Integer(0);
    String visitCountKey = new String("visitCount");
    String userIDKey = new String("userID");
    String userID = new String("ABCD");
    if (session.isNew()) {
        title = "Welcome to my website";
        session.setAttribute(userIDKey, userID);
        session.setAttribute(visitCountKey, visitCount);
    }
    visitCount = (Integer) session.getAttribute(visitCountKey);
    visitCount = visitCount + 1;
    userID = (String) session.getAttribute(userIDKey);
    session.setAttribute(visitCountKey, visitCount);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Session会话跟踪示例</title>
</head>
<body>
    <div style="margin: auto; width: 80%;">
        <center>
            <h2>
                Session会话跟踪示例
                </h1>
        </center>

        <table border="1" align="center">
            <tr bgcolor="#949494">
                <th>会话信息</th>
                <th>值</th>
            </tr>
            <tr>
                <td>id</td>
                <td>
                    <%
                        out.print(session.getId());
                    %>
                </td>
            </tr>
            <tr>
                <td>创建时间</td>
                <td>
                    <%
                        out.print(createTime);
                    %>
                </td>
            </tr>
            <tr>
                <td>最近一次访问时间</td>
                <td>
                    <%
                        out.print(lastAccessTime);
                    %>
                </td>
            </tr>
            <tr>
                <td>用户ID</td>
                <td>
                    <%
                        out.print(userID);
                    %>
                </td>
            </tr>
            <tr>
                <td>访问次数</td>
                <td>
                    <%
                        out.print(visitCount);
                    %>
                </td>
            </tr>
        </table>
    </div>
</body>
</html>

删除会话数据

  1. 完成用户的会话数据后可以删除会话信息
  2. 删除一个指定的属性 - 可以调用public void removeAttribute(String name)方法来删除与特定键相关联的值。
  3. 删除整个会话信息 - 可以调用public void invalidate()方法来删除(丢弃)整个会话信息。
  4. 设置会话超时 - 可以调用public void setMaxInactiveInterval(int interval)方法来单独设置会话的超时。
  5. 注销登录用户 - 支持servlets 2.4的服务器,可以调用注销将客户端记录在Web服务器之外,并使属于用户的所有会话失效。
  6. web.xml配置 - 如果使用的是Tomcat,除了上述方法外,还可以在web.xml文件中配置会话超时,如下所示-<session-timeout>指定超时表示的时间单位为分钟
<session-config>
 <session-timeout>15</session-timeout> 
</session-config>
  1. servlet中的getMaxInactiveInterval()方法以秒为单位返回该会话的超时时间。 因此,如果会话在web.xml中配置了15分钟,那么getMaxInactiveInterval()方法将返回900秒。