IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> servlet之session -> 正文阅读

[系统运维]servlet之session

什么是session?

session即会话的意思。用户打开一个浏览器, 点击多个超链接, 访问服务器多个web资源, 然后关闭浏览器, 整个过程称之为一次会话。
session是服务器端技术,用来跟踪用户状态。当客户端第一次发起请求后,服务器会生成一个唯一的session id并通过响应发回给客户端,客户端以后的每次请求都要将这个session id发给服务器(用cookie来实现),服务器根据这个session id来匹配会话,如果存在则将对应会话与此请求关联,以获取用户状态。session可以存放在内存,文件,数据库中
服务器在运行时为每一个用户浏览器创建一个独享的session对象,即一个session对象对应一个用户浏览器

删除session

有两种方式:

  1. 通过配置web.xml文件,设置session的有效期(超时时间);
  <session-config>
        <!-- 设置session的默认失效时间,以分钟为单位       -->
        <session-timeout>10</session-timeout>
    </session-config>
  1. 删除指定键值的session,
HttpSession session = req.getSession();
session.removeAttribute(“username”);

直接注销session对象(只会注销当前用户对应的session对象),

session.invalidate();

session的使用场景

  • 保存一个用户的登录信息
  • 保存购物车
  • 对于网站经常使用的信息,可以保存在session中

实例

该类主要是设置session信息,对应/s1请求

package com.zhmsky.servlet;

import pojo.Student;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * @author zhmsky
 * @date 2021/10/20 10:43
 */
public class SessionDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        //获取session对象
        HttpSession session = req.getSession();
        session.setAttribute("student", new Student("张依依", 21, "202198873"));
        if (session.isNew()) {
            PrintWriter out = resp.getWriter();
            out.write("session新创建成功!" + " id是:" + session.getId());
        } else {
            PrintWriter out = resp.getWriter();
            out.write("session已存在!" + " id是:" + session.getId());
        }

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

该类主要从session中取出对应信息,对应s2请求

package com.zhmsky.servlet;

import pojo.Student;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * @author zhmsky
 * @date 2021/10/20 21:10
 */
public class SessionDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        HttpSession session = req.getSession();
        //session可以存放对象
        Student student = (Student) session.getAttribute("student");
        PrintWriter out = resp.getWriter();
        out.write(student.toString());
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

该类主要实现手动删除cookie,对应s3请求

package com.zhmsky.servlet;

import pojo.Student;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * @author zhmsky
 * @date 2021/10/20 21:15
 */
public class SessionDemo03 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        String student = "student";
        //删除字段为username的session
        session.removeAttribute(student);
        //手动清除session
        session.invalidate();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

打开浏览器请求/s1地址,通过浏览器控制台可以看到,session id是存放在cookies中的,
在这里插入图片描述
在这里插入图片描述
通过抓包可以看到,请求头携带的cookie中包含有session id
在这里插入图片描述
再请求/s2地址,可以拿到session的对应信息,
在这里插入图片描述
之后,再请求/s3地址,执行了invalidate()方法,会清除该session对象的所有信息,注意这里!! session确实是被注销了,但是注销的是上一个session对象,只要浏览器没有关闭,会话保持,服务器会立马再设置一个新的session对象,可以看到此时的请求头的cookie的确还包含了session id,
此时的session id为65AAB60B78F6A7EFAC05EDAFFBA1B999(记住它!)

在这里插入图片描述
然后再次请求/s1地址,通过抓包可以看到,
在这里插入图片描述
此时响应头里多了set cookie字段,并且包含session id为B062664F4D194C82DEC5AAC7B32D9067,而请求头的cookie字段包含的session id为65AAB60B78F6A7EFAC05EDAFFBA1B999(这就是刚才注销session后产生的session id,也就是标识上一个session对象的session id),而这个响应头的session id为现在这个会话的新session id

通过这个过程,我们可以知道整个session的工作流程:
客户端第一次发送请求给服务器,服务器会返回一个session id,并通过http协议告知客户端需要在cookie中保存这个session id,以后客户端每次再请求服务器时,会把这个session id夹在cookie中一并发送给服务器,服务器根据这个session id来匹配当前会话,从而达到跟踪用户状态的目的。这也是为什么说大多数的应用都是用 Cookie 来实现Session跟踪的原因。

如果浏览器禁用cookie怎么办?

一般这种情况下,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-21 12:49:07  更:2021-10-21 12:49:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:45:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码