JavaWeb = Session详解与使用

前言session它是一个域对象三大域对象:ServletContext,Session,Request注意:由于客户端需要接收、记录和回送Session对象的ID,因此,通常情况下,Session是借助Cookie技 术来传递ID属性的。一,Session(1)使用Cookie的问题:1,最多存储4k字符串2,存储数据不太安全session的作用:在一...
摘要由CSDN通过智能技术生成

前言

session它是一个域对象

三大域对象:ServletContext,Session,Request

注意:

由于客户端需要接收、记录和回送Session对象的ID,因此,通常情况下,Session是借助Cookie技
术来传递ID属性的。

一,Session

(1)使用Cookie的问题:

1,最多存储4k字符串

2,存储数据不太安全

session的作用:在一次会话的多次请求之间共享数据,将数据保存到服务器

(2)HTTPSession也是一个域对象

void setAttribute(String name, Object value) 
在session中保存数据 

Object getAttribute(String name) 
从session中获取数据 

void removeAttribute(String name) 
从session中移除数据

使用:

1. 将数据存储到session中
	// 1.通过rquest对象,获取session对象
		HttpSession session = request.getSession();
	// 2.操作session的API,存储数据
		session.setAttribute("username","哈哈,呵呵");

2. 从session中获取数据
	// 1.通过rquest对象,获取session对象
		HttpSession session = request.getSession();
	// 2.操作session的API,获取数据
		session.getAttribute("username");

code:

@WebServlet("/SetSession")
public class SetSession extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1.通过rquest对象,获取session对象
        HttpSession session = request.getSession();
        // 2.操作session的API,存储数据
        session.setAttribute("username", "哈哈,呵呵");
    }

}

@WebServlet("/GetSession")
public class GetSession extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1.通过rquest对象,获取session对象
        HttpSession session = request.getSession();
        // 2.操作session的API,获取数据
        String username = (String) session.getAttribute("username");
        System.out.println("GetSession获取:" + username);
    }

}

(3)工作原理

Session基于Cookie技术实现

(4)Session细节

--1.客户端关闭,服务器不关闭

两次获取的Session数据是否为相同:

* 默认情况下,浏览器关闭,再次打开二次获取的session不一样
    基于cookie实现(浏览器关闭,cookie销毁)
    
* 设置cookie的存活时间(JESSIONID)
    这里我们代替服务器,做一个小操作,覆盖这个JSESSIONID,指定持久化时间

--2客户端不关闭,服务器关闭

两次获取的Session数据是否相同?

* 当服务器正常关闭,重启后,二次获取的session数据一样
    tomcat这实现以下二个功能
    钝化(序列化)
        当服务器正常关闭时,session中的数据,会序列化到磁盘
    活化(反序列化)
        当服务器开启后,从磁盘文件中,反序列化到内存中

注意一个问题:Idea问题:

支持钝化,但是在重新启动的时候又会删除了钝化文件,所以导致会变,解决方法如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值