Web---Servlet---Session

标签: Session

Session会话简介

会话是指在一段时间内,用户使用同一个浏览器进程与Web应用之间的交互过程。

会话(Session)通常用来跟踪用户的状态,缓存用户在此浏览器进程中的信息。

当用户关闭浏览器,上一个Session也就无法再次获得了(CookiemaxAge-1的情况)。再次打开新的浏览器,将开始一个新的会话。

javax.servlet.http.HttpSession。每一个HttpSession代表用户的一个会话。

每一个Session的过期时间默认为30分钟。

当浏览器第一次访问服务器时,无论先访问哪一个页面,服务器就会给用户分配一个唯一的会话标识,即jsessionid然后以cookie的形式返回给用户。

服务器给每个用户创建一个会话,即HttpSession对象,保存在服务器端。

那么,当用户再次访问服务器时,服务器是如何知道还是当前用户呢?

当浏览器再次访问服务器时,会携带包含了jsessionidcookie访问服务器。服务器根据此id返回此用户的HttpSession对象,就保持了会话。

HttpSession

Session的唯一标识Id

每一个Session都一个唯一标识,即ID

当浏览器获取一个新的Session时,用户即可以通过session.geId();打印出ID的值 。

再不关闭浏览器的情况下,在多个页面上跳转,使用的是同一个Session

代码演示

部分代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>cookie,session技术演示</title>
  </head>
  
  <body>
    <h1>cookie,session技术演示</h1>
    <h2>session技术演示1: 强化一下request、session和application3个容器的作用域</h2>
          往3个容器中存入数据:<br>
    <form action="SaveServlet" method="post">
       Name:<input type="text" name="name" /> <br>
       <input type="submit"/>
    </form>
    <a href="GetServlet">读取3个容器中的数据</a>	
    <!-- 
    黑客盗用别人的账户登录:
    http://localhost:8080/SessionDemo/GetServlet;jsessionid=69DBD069D37C53A84AFA7F48411ECB51
     -->
     
      <h2>重写URL技术---能够让我们的项目Session不依赖于cookie</h2>
    <% String url = response.encodeURL("SaveServlet"); %>
    <form action="<%=url%>" method="post">
       Name:<input type="text" name="name" /> <br>
       <input type="submit"/>
    </form>
    <a href="<%=response.encodeURL("GetServlet")%>">读取3个容器中的数据</a> <br>
    <hr>
    <a href="jsps/ex.jsp">有关session技术使用的两个例子</a>
  </body>
</html>

完整代码:

环境:javaee1.6版本,jre1.8,tomcat8.5

SessionDemo完整代码

原文链接:加载失败,请重新获取