Java Session

概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端

简单例子

设置session对象:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Session;

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

public class SessionDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //设置session
        HttpSession session = request.getSession();
        //设置数据
        session.setAttribute("msg", "hello session");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    }

}

获取数据

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Session;

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

public class SessionDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //获取session
        HttpSession session = request.getSession();
        //获取数据
        Object msg= session.getAttribute("msg");
        System.out.println(msg);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    }

}

之后必须允许第一个代码后,才能获取到数据。同时如果关闭服务器了那么数据就会清空

原理

session是依赖于cookie的
当第一次访问网站时。没有cookie。那么服务器就会创建一个session对象并给一个唯一的ID。之后重新访问网站,会通过cookie请求头获得id。然后服务器就会通过ID获取session

细节一

客户端关闭,服务器不关闭。两次获得的session默认情况下不是同一个(相当于关闭浏览器 重新打开)
可以通过设置cookie 根据上面原理来避免这种情况

细节2

客户端不关闭,服务器关闭。两次获得的session默认情况下不是同一个
不是同一个但是我们在功能上需要做到数据不丢失。
利用session钝化机制:将session对象系列化保存在硬盘里
session活化机制:服务器启动后,将session文件转化为内存中的session对象
这样虽然session不一样,但是里面保存的数据是一样的。

细节3

session被关闭的条件:
1.服务器关闭
2.调用invalidate方法
3.默认生存时间30分钟 可在web.xml文件中配置信息修改

特点和cookie的区别

posted @ 2021-03-04 10:57  一个经常掉线的人  阅读(134)  评论(0)    收藏  举报