栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Session

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Session

一 概念

服务器端会话技术 在一次会话的多次请求间共享数据 将数据保存在服务器端的对象HttpSession中

二 快速入门 2.1 HttpSession对象的常用方法 获取HttpSession对象 使用HttpSession对象

SessionDemo1

package Session;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/SessionDemo1")
public class SessionDemo1 extends HttpServlet {
​
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //使用session共享数据
        //1.获取session
        HttpSession session = req.getSession();
        //2.存储数据
        session.setAttribute("msg","kong");
    }
​
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

SessionDemo2

package Session;
​
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
​
import java.io.IOException;
​

@WebServlet("/SessionDemo2")
public class SessionDemo2 extends HttpServlet {
​
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //使用session获取数据
        //1.获取session
        HttpSession session = req.getSession();
        //2.获取数据
        Object msg = session.getAttribute("msg");
        System.out.println(msg);
​
​
    }
​
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}
三 原理

Session的实现是依赖于cookie的

 浏览器第一次请求服务器 服务器创建一个session对象 服务器第一次响应时 回加一个响应头set-cookie 浏览器会将cookie保存 

第二次请求服务器时 会带着cookie访问 这时服务器就知道两次请求时是同一个会话 可以将数据保存到一个共有的session对象中

四 细节 1.当客户端(浏览器)关闭后 服务端不关闭 两次获取session是否为同一个?

默认情况下不是同一个

如果希望客户端关闭后 session也能相同 

采用如下方式

创建cookie 设置属性

因为本身就是靠cookie传递的嘛 也就是说 只要每次请求传递的cookie符合条件 这些请求就可以看做是一次会话 可以共用一个session保存共有数据

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //使用session获取数据
    //1.获取session
    HttpSession session = req.getSession();
    //期待客户端关闭后 session也能相同
    cookie cookie = new cookie("JSESSIONID", session.getId());
    //存活时间
    cookie.setMaxAge(60*60);
    resp.addcookie(cookie);
    System.out.println(session);
}
2.客户端不关闭 服务器关闭后 两次获取的session是同一个吗?

不是同一个 但是要保证数据不丢失

  • session的钝化

    • 在服务器正常关闭之前 将session对象序列化到硬盘上

  • session的活化

    • 服务器启动后 将session文件转化为内存中的session对象即可

3.session什么时候被销毁
  • 服务器关闭

  • session对象调用invalidate方法

  • 默认失效时间30min

五 特点
  1. session用于存储一次会话的多次请求的数据 存在服务器端

  2. session可以存储任意类型 任意大小的数据

session与cookie的区别
  • session存数据在服务器端 cookie在客户端

  • session没有数据大小限制 cookie有

  • session数据安全 cookie相对于不安全

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/617906.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号