一文了解Session

举报
执久呀 发表于 2022/07/25 21:48:37 2022/07/25
【摘要】 ​目录Session介绍 Session原理 Session使用细节Session钝化、活化Session销毁:Session介绍服务端会话跟踪技术:将数据保存到服务端JavaEE提供HttpSession接口,来实现一次会话的多次请求间数据共享功能使用:1、获取Session对象HttpSession session=request.getSession();2、Session对象功能vo...


目录


Session介绍

 Session原理

 Session使用细节

Session钝化、活化

Session销毁:


Session介绍

服务端会话跟踪技术:将数据保存到服务端

JavaEE提供HttpSession接口,来实现一次会话的多次请求间数据共享功能

使用:

1、获取Session对象

HttpSession session=request.getSession();

2、Session对象功能

void setAttribute(String name,Object o);//存储数据到session域中
Object getAttribute(String name);//根据key获取value值
void removeAttribute(String name);//根据key,删除键值对

编辑



创建两个类SessionServlet和SessionServlet1

package com;


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;

public class SessionServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //存储到session中
        //1、获取session对象
        HttpSession session=req.getSession();
        //存储数据
        session.setAttribute("username","root");

    }
}
public class SessionServlet1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //获取数据。从session中
        //1获取session对象
        HttpSession session=req.getSession();
        //获取数据
        Object username=session.getAttribute("username");
        System.out.println("获取到的session值为"+username);
        
    }

web.xml配置两个类的访问地址

   <servlet>
        <servlet-name>SessionServlet1</servlet-name>
        <servlet-class>com.SessionServlet1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SessionServlet1</servlet-name>
        <url-pattern>/sessionServlet1</url-pattern>
    </servlet-mapping>


    <servlet>
        <servlet-name>SessionServlet</servlet-name>
        <servlet-class>com.SessionServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SessionServlet</servlet-name>
        <url-pattern>/sessionServlet</url-pattern>
    </servlet-mapping>

先访问①后访问②运行得

编辑

 Session原理

Session是基于Cookie实现的

获取的对象有唯一的标识id的,tomcat把session的id当成cookie发送给浏览器,tomcat在响应是会加上set-cookie这个响应头JSESSIONID=值存储到浏览器内存中,第二次获取时就会去内存中寻找有无id为之前的,有就直接用那数据,没有就创建


编辑

 Session使用细节

Session钝化、活化

服务器重启,Session中的数据还会存在?

钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘文件中

活化:在次启动服务器后,从文件中加载数据到Session中

Session销毁:

①默认情况下,无操作30分钟后自动销毁(下列单位分钟)

 <session-config>
        <session-timeout>30</session-timeout>
    </session-config>

②调用Session对象的invalidate()方法

浏览器一关,session就销毁了,因为session是通过cookie传输

小结

Cookie和Session都是来完成一次会话内多次请求间数据共享的

区别:

存储位置:Cookie是将数据存储在客户端,Session将数据储存在服务器

安全性:Cookie不安全,Session安全

数据大小:Cookie最大3KB,Session无大小限制

存储时间:Cookie可以长期存储,Session默认30分钟

服务器性能:Cookie不占服务器资源,Session占用服务器资源

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。