JavaWeb之路04--会话跟踪

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_42267300/article/details/87896180

会话跟踪技术

会话跟踪技术是Web程序中常用的技术,用于跟踪用户的一次完整会话。

用户打开一个浏览器访问一个网站,只要不关闭该浏览器,不管该用户点击多少个超链接,访问多少资源,直到用户关闭浏览器,或者服务器关闭,这整个过程我们称作一次会话。

常用的会话跟踪技术是cookie和session。cookie机制是通过在客户端记录信息确定用户身份,session机制是通过在服务器端记录信息确定用户身份。

cookie机制

cookie是客户端会话技术。

工作流程

客户端浏览器访问服务器端,服务器端建立一个cookie。

服务器通过response(响应头 set-cookie)将cookie返回给浏览器。

cookie保存在浏览器上,等到下一次访问服务器时,通过一定规则携带cookie,通过request(请求头 cookie)携带,服务器就可以拿到cookie值。

cookie机制相关API

new Cookie(String name, Object value);//创建cookie
response.addCookie(Cookie cookie);//将cookie返回给浏览器
Cookie[] request.getCookie();//获取cookie

index.jsp

<%--
  Created by IntelliJ IDEA.
  User: XJM
  Date: 2019/2/10
  Time: 11:19
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>主页</title>
  </head>
  <body>
    <a href="${pageContext.request.contextPath}/cookie.jsp">访问网站</a>
  </body>
</html>

cookie.jsp

<%@ page import="java.util.Date" %>
<%@ page import="java.text.DateFormat" %><%--
  Created by IntelliJ IDEA.
  Author: XJM
  Date: 2019-02-24
  Time: 21:14
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        Cookie accountCookie = null;
        if (request.getCookies() != null) {
            for (Cookie cookie : request.getCookies()) {
                if (cookie.getName().equals("account")) {
                    accountCookie = cookie;
                }
            }
        }

        if (accountCookie == null) {
            %>
            欢迎访问本网站
            <%
        } else {
            %>
            上次访问时间为:${cookie.get("account").value}
            <%
        }

        accountCookie = new Cookie("account", DateFormat.getDateTimeInstance().format(new Date()));
        accountCookie.setMaxAge(3600);
        response.addCookie(accountCookie);
    %>
</body>
</html>

运行结果
index界面
第一次访问时:
第一次访问时
第二次访问时:
第二次访问时

注意:cookie不能跨浏览器,且不支持中文


session机制

session是服务器端会话技术。

工作流程

浏览器向服务器端发送请求,服务器端判断浏览器是否携带了唯一标识

  • 若有唯一标识:服务器将在session池中查询该标识
    • 若查询到:则可直接使用该session,并将其返回给浏览器存放
    • 若未查询到:服务器为其创建一个私有的内存空间,session对象可操作,并将其返回给浏览器存放
  • 若无唯一标识:服务器为其创建一个私有的内存空间,session对象可操作,并将其返回给浏览器存放

session相关API

HttpSession session=request.getSession();//获取session
//xxxAttribute()session属性操作
setAttribute(String s, Object o);//设置session属性
getAttribute(String s);//获取session属性值
removeAttribute(String s);//移除session

session生命周期

  • session的创建:

Sessinon在用户访问第一次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。

  • session的销毁:

1. 服务器正常关闭
2. 长时间未使用session,导致超时:Tomcat默认30分钟,也可手动设置
有三种方法:
        1. setMaxInactiveInterval(int interval) //单位为秒 interval =-1时永不过期,interval=0时表示删除
        2. web.xml中设置
        <session-config>
                <session-timeout>30</session-timeout>
                <!-- 单位为分钟 -->
        </session-config>
        3.tomcat也可修改,在server.xml中定义context时使用下面的标签来定义:
        <Context path="/livsorder" docBase="/home/httpd/html/livsorder" defaultSessionTimeOut=“3600”
        isWARExpanded=“true” isWARValidated=“false” isInvokerEnabled=“true” isWorkDirPersistent=“false”/>
3. 手动销毁:invalidate()

猜你喜欢

转载自blog.csdn.net/qq_42267300/article/details/87896180