HttpSession的用法

一、HttpSession的介绍

1.1、HttpSession 服务端的技术

服务器会为每一个用户 创建一个独立的HttpSession

1.2、HttpSession原理

当用户第一次访问Servlet时,服务器端会给用户创建一个独立的Session

并且生成一个SessionID,这个SessionID在响应浏览器的时候会被装进cookie中,从而被保存到浏览器中

当用户再一次访问Servlet时,请求中会携带着cookie中的SessionID去访问

服务器会根据这个SessionID去查看是否有对应的Session对象

有就拿出来使用;没有就创建一个Session(相当于用户第一次访问)

1.3.域的范围:

Context域 > Session域 > Request域

Session域 只要会话不结束就会存在 但是Session有默认的存活时间(30分钟)

二、Cookie

2.1、Cookie机制

  • 理论上讲,一个用户的所有的请求都属于同一个会话,不能与其他的用户混淆,如A加入到购物车的商品不能出现在B的购物车内。
  • 然而实际上,Web应用使用HTTP协议传输数据,而HTTP属于无状态协议,一旦数据交换完毕就会断开连接,也就意味着无法从连接上跟踪会话。

2.2、什么是Cookie?

        Cookie实际上是一小段文本,其工作原理是,如果服务端需要记录一段信息,就是要response想浏览器发送一段Cookie,客户端保存,浏览器在发送请求时会将URL连同Cookie一起发送给服务器,这样服务器就可以通过它来确认客户身份。

2.3、服务器操作Cookie

//javax.servlet.http.Cookie对象使用key-value属性对的形式保存用户状态,一个Cookie对象保存一个属性对,一个request或者response同时使用多个Cookie
request.getCookie();//获取客户端提交的所有的Cookie,返回Cookie[]
resopnse.setCookie();//向客户端发送Cookie

2.4、Javascript操作Cookie

<script>document.write(document.cookie);</script>

三、Session

3.1、Session机制

        Session是服务端记录客户端状态的机制,使用简单,但是增加了服务器的存储压力。Session机制决定了当前客户只会获取到自己的Session,而不会获取到别人的Session。各客户的Session也彼此独立,互不可见。

3.2、什么是Session

客户端访问服务器时,服务器会通过session的方式将信息保存下来,当客户端再次访问服务器时,只需要检查服务器中Session的状态就可以了。为了高效的存储速度,服务器会把Session存储到内存中,每个用户有一个独立的Session,如果Session过于复杂,那么再大量用户访问的情况下可能存在内存溢出。

3.3、服务器操作Session

//javax.servlet.http.HttpSession。每个来访者对应一个Session对象,Session对象是在客户端第一次请求服务器的时候创建的
HttpSession session = request.getSession();       // 获取Session对象
session.setAttribute("loginTime", new Date()); // 设置Session中的属性

session.getAttribute("loginTime"); // 获取Session属性

3.4、Session的生命周期

        Session在第一次访问服务器的时候就创建了,创建之后 ,用户继续访问就会刷新最后访问时间,此时服务器会认为该Session活跃了一次。

3.5、Session的有效期

        服务器会把长时间没有活跃的Session从内存删除,这个时间就是Session超时时间maxInactiveInterval,可以通过对应的getMaxInactiveInterval()获取,通过setMaxInactiveInterval(longinterval)修改,也可以在web.xml中修改。

        另外,通过调用Session的invalidate()方法可以使Session失效。  

        Tomcat中Session的默认超时时间为20分钟。通过setMaxInactiveInterval(int seconds)修改超时时间。可以修改web.xml改变Session的默认超时时间。例如修改为60分钟:

<session-config>
   <session-timeout>60</session-timeout>      <!-- 单位:分钟 -->
</session-config>

注意:参数的单位为分钟,而setMaxInactiveInterval(int s)单位为秒。

四、Session与Cookie的关系

        Session依赖于Cookie,Cookie是客户端的绘画技术,而Session是服务器端的绘画技术,每当调用getSession()方法时,创建一个降维jsessionid的cookie

五、服务器三大组件

监听器、过滤器、Servlet

六、常用方法

  1. 设置请求的编码: request.setCharacterEncoding()
  2. 设置响应的编码: response.setCharacterEncoding()
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值