Servlet与JSP进阶五:用户会话Session对象

本篇博客主要内容是:

       ● Session简介;

       ● Session的设置和获取示例代码;

       ● Session的演示;

       ● 了解Session背后的原理;

 

问题:Cookie是把用户信息存放在了本地,虽然加密了,但还是有破解的风险,不安全;同时,每次浏览器请求时,都需要额外传递Cookie信息,这无疑增加了带宽的负担;

所以,JavaWeb提供了一种新的实现方案,诸如“用户登录状态”或者“用户登录”的信息不再存储在浏览器这边,而是把这些信息存在服务器中;这就是引出了Session。


Session简介 

● Session:将数据存储在服务器端;

● 默认情况下Session和前端的浏览器窗口绑定,并且Session在没有人访问的时候,时常是30分钟;(即一个浏览器窗口在服务器上有一个30分钟的存储空间)

● Session如何知道,某个浏览器窗口和服务器的哪一块存储空间对应嘞?在Session被创建后,Cookie中会保存一个叫SessionId的数据,通过SessionId可以向服务题提取只属于我自己这个浏览器窗口所对应的数据了;


设置Session,获取Session

Session常用方法:

         request.getSession():获取Session对象;

         get|set|removeAttribute():获取|设置|删除Session对象;

         setMaxInactiveInterval:设置Session超时时间;

如下示例:

需要明白,一旦打开了一个浏览器窗口,Tomcat服务器就会在内存中开辟一块空间,存储这个浏览器窗口的Session对象,只要这个浏览器窗口不关闭,那么所有的请求就会公用一个Session对象,任何request.getSession();获得的都是同一块区域中的session对象(即是同一个对象)

情况一:打开浏览器,访问SessionLoginServlet:    

情况二:在执行完情况一的操作后,不关闭浏览器窗口,而是重新访问SessionLoginServlet:

情况三:执行完情况一之后,不访问SessionLoginServlet了,而是直接访问:SessionIndexServlet:

情况四:关闭浏览器窗口,不访问SessionLoginServlet了,而是直接访问:SessionIndexServlet:

Session对象可以看成是与浏览器窗口绑定的对象,对于一个浏览器窗口中所产生的数据,Tomcat会为其创建一个单独的存储空间进行独立存放,每个浏览器窗口所对应的存储空间都是不同的,而存储空间的标识符就是上面的sessionId;

session对象:一个与浏览器窗口绑定的,把数据存放在Tomcat内存中的对象;这个对象有个专业名词就是Session;


Session原理

问题情况引入:

接上,访问SessionLoginServlet:

关闭浏览器窗口,重新打开一个新的窗口,再次访问SessionLoginServlet:

Session原理解释:

浏览器发起请求后到Tomcat后,Tomcat会为这个浏览器窗口(会话啦)分配一块内存空间空间,存放session对象,然后可以设置session对象属性等;然后Tomcat响应的的时候,会把SessionId返回给浏览器,浏览器将这个SessionId存放在cookie中,再次请求的时候,cookie的SessionId会跟着请求一并过来,从而可以根据SessionID访问Tomcat中的某个地址空间中的session对象了;

一旦浏览器窗口关闭了,那么本次会话也就over了,然后这个Session也跟着一起over了,那么这个Session在内存中的空间也被回收了?

不是哦:而是关闭浏览器窗口时,只是将存储在浏览器中的那个JSESSIONID的cookie给抛弃了(但是,这个JSESSIONID在Tomcat内存中session对象并没有立即销毁;))

可以发现,Cookie是Session的基础


注解:

(1)一个会话一旦建立,Tomcat会自动在内存中创建一个Session对象,我们可以通过HttpSession session = request.getSession();来获取这个对象;

(2)cookie(大概率)也是浏览器自动创建的,浏览器会有一个存放所有Cookie对象的列表:然后我们也可以通过Cookie cookie = new Cookie("user","admin");自己创建一个cookie,然后通过response.addCookie(cookie);   响应返回给浏览器 ,然后浏览器会把这个返回的cookie添加到自己维护的cookie列表中;然后可以通过Cookie[] cs = request.getCookies();获得所有cookie的列表;

(3)换句话说,Session是Tomcat服务器创建和维护的;Cookie是浏览器创建和维护的;这是两个特殊的Java对象,这些对象有很多属性和方法,我们可以按需调用;

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ServletJSP中的对象都是为了方便Java程序员在Web开发中进行数据传递、状态管理和页面渲染等操作而设计的,它们各自的作用如下: 在Servlet中,常用的对象包括: 1. request对象:代表客户端的请求,可以用来获取请求参数和设置请求属性。 2. response对象:代表服务器的响应,可以用来发送响应数据和设置响应属性。 3. session对象:代表客户端和服务器之间的会话,可以用来存储客户端的状态信息。 4. ServletContext对象:代表整个Web应用程序,可以用来存储全局信息。 5. ServletConfig对象:代表当前Servlet的配置信息,可以用来获取初始化参数。 6. exception对象:代表Servlet中发生的任何异常。 在JSP中,常用的对象包括: 1. request对象:代表客户端的请求,可以用来获取请求参数和设置请求属性。 2. response对象:代表服务器的响应,可以用来发送响应数据和设置响应属性。 3. session对象:代表客户端和服务器之间的会话,可以用来存储客户端的状态信息。 4. out对象:代表输出流,可以用来向客户端输出响应数据。 5. pageContext对象:代表当前JSP页面的上下文,可以用来获取其他对象。 6. application对象:代表整个Web应用程序,可以用来存储全局信息。 7. exception对象:代表JSP页面中发生的任何异常。 这些对象可以用来完成数据传递、状态管理和页面渲染等操作。在实际开发中,Java程序员会根据具体的需求来选择合适的对象,以完成相应的操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值