session的原理及应用

本文详细介绍了HTTP Session的工作原理,包括服务器如何为每个用户创建Session对象,Session如何通过Cookie进行管理,以及Session如何在浏览器关闭但未清除JSESSIONID时保持活性。此外,还展示了如何使用Session存储和读取用户信息,以及如何手动注销Session。通过具体的Servlet代码示例,阐述了Session在实际应用中的操作过程。
摘要由CSDN通过智能技术生成

原理

1. 1. 1. 服务器会给每一个用户(浏览器)创建一个Seesion对象;
2. 2. 2. 一个Session独占一个浏览器,只要浏览器没有关闭(不断开tomcat或不清除JSESSIONID)(网页关闭不影响),这个Session就存在;
3. 3. 3. 用户登录之后,整个网站它都可以访问!–> 保存用户的信息;保存购物车的信息……
4. 4. 4. Session的创建通过cookie完成

		//Session创建的时候做了什么事情;
        Cookie cookie = new Cookie("JSESSIONID",sessionId);
     	resp.addCookie(cookie);

在这里插入图片描述
在这里插入图片描述

储存用户信息

1. 1. 1. 通过Session储存对象等信息;一个Session独占一个浏览器,只要浏览器不关闭(不断开tomcat或不清除JSESSIONID)(网页关闭不影响),JSESSIONID一直是同一个,因此可以实现跨Servlet访问数据。
2. 2. 2. 存储用户信息时一般采用Session,而不用Context,因为Context资源有限。

//获取客户端的session
        HttpSession session = req.getSession();
        //给Session中存东西
        session.setAttribute("name",new Person("冰墩墩",1));

手动注销

//手动注销Session
session.invalidate();

具体代码

/**
 * @author tl
 * 取出客户端Session,并存入数据
 */
public class SessionDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决乱码问题
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");
        //获取客户端的session
        HttpSession session = req.getSession();
        //给Session中存东西
        session.setAttribute("name",new Person("冰墩墩",1));
        //取出sessionID
        String sessionID = session.getId();
        //判断Session是不是新创建
        if (session.isNew()){
            resp.getWriter().write("session创建成功");
        }else {
            //sessionID并不是存进去的name
            resp.getWriter().write("session已经在服务器中存在了,ID:"+sessionID);
        }

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
/**
 * @author tl
 * 取出客户端Session,并取出数据
 */
public class SessionDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取客户端的session
        HttpSession session = req.getSession();
        Person baby = (Person)session.getAttribute("name");
        System.out.println(baby.toString());
    }

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

在这里插入图片描述

Session会话的寿命

参考资料:https://blog.csdn.net/stanxl/article/details/47105051

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值