JSP_session会话跟踪

Posted 小企鹅推雪球!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSP_session会话跟踪相关的知识,希望对你有一定的参考价值。

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秒。

以上是关于JSP_session会话跟踪的主要内容,如果未能解决你的问题,请参考以下文章

在 Firebase 中禁用自动活动跟踪

使用跟踪代码管理器的 Android 内容实验几天后未显示会话

实现会话跟踪时出现 NullPointerException

在 Google 跟踪代码管理器中使用 GA Bigquery 导出架构变量

如何跟踪具有访问令牌的用户是否仍具有有效会话?

会话跟踪