JavaWeb 03 Cookie与Session

Cookie是什么?


    Cookie可以保存信息(保存在浏览器端上),其中保存了String类型的name-value(键值对)
Cookie可以保存会话状态,这个会话状态是保留在客户端(浏览器端)上的; 只要Cookie清除,或者Cookie失效,这个会话状态就没有了【应用在Session中,请看下一章节】
Cookie是保存在浏览器客户端上的
Cookie默认保存在浏览器的缓存中,浏览器关闭Cookie消失
Cookie可以保存在客户端硬盘文件中,浏览器关闭Cookie还在,除非Cookie消失(有效时长完结)

创建Cookie

服务器创建Cookie并发送给浏览器

Cookie绑定路径 

Cookie未绑定路径时默认绑定的路径:

       在默认情况下,未设置Cookie绑定路径的Cookie,会绑定当前访问路径的上一层路径(带"/"),如:

     访问/webapp/test/a路径时,服务器发送的Cookie(此Cookie未人为设置绑定路径),那么此Cookie默认绑定的路径未/webapp/test/,所以访问/webapp/test/、/webapp/test/···时都会将此Cookie发送给服务器


Cookie绑定路径:

      cookie.setPath();来设置此Cookie绑定的访问路径;当设置此Cookie绑定的路径时,浏览器只有访问此路径,以及此路径下的其他资源时,浏览器才会将此Cookie发送到服务器

如下:

     那么此Cookie只有浏览器访问/webapp19/user路径,以及/webapp/user/···等等其他此路径下的其他资源时,浏览器才会将此Cookie发送到服务器

  

浏览器何时发送Cookie

     只有当浏览器访问Cookie绑定的路径以及此路径下的其他资源时,浏览器才会将Cookie发送给服务器

Cookie有效时长

   

通过方法cookie.setMaxAge(int expiry)

  • 值为正数,以秒为单位指定Cookie的最长期限,Cookie存储在硬盘文件当中;
  • 值为负数,则此Cookie在关闭此窗口页面后即失效;
  • 如果为零,则删除此Cookie;

HttpSession 

    Session概述

 1.Cookie可以将会话状态保存在客户端,而HttpSession可以将会话状态保存在服务器端
 2.HttpSession对象是一个会话级别的对象,一次会话对应一个HttpSession对象
 3.在会话进程中,web服务器一直为当前这个用户维护着一个会话对象HttpSession
 4.在web容器中,维护了大量的HttpSession对象,这些对象放在一个Map集合中

  获取Session对象

 

Session实现原理 

1,浏览器发送请求,服务器对应的Servlet首次调用request.getSession(true);方法时获取Session对象:

1.服务器会创建一个Session对象,同时创建一个对应的Cookie对象,并且Cookie对象的name是2.JSESSIONID,Cookie的value是32位长度的字符串
3.服务器将Cookie的value和HttpSession对象绑定到session列表中(Map集合)
4.服务器将Cookie发送到客户端浏览器,浏览器将Cookie保存到缓存中
2, 浏览器再次发送请求,会自动提交Cookie(前提是同一个绑定路径下)

             1. 当服务器Servlet再次调用request.getSession();方法时获取Session对象
             2.服务器接收到Cookie,验证Cookie的name为JSESSIONID,然后获取Cookie的value
             3.通过Cookie的value去session列表(Map集合)中检索对应的HttpSession对象

Session对象生命周期

 

web系统中引入了session超时的概念,当很长一段时间(这个时间可以配置)没有用户再访问session对象,此时session对象超时,web服务器自动回收session对象

设置Session对象失效时间(两次请求之间的最大时间间隔),优先级 1 > 2 > 3

1.通过Java代码实现,单位秒

     

2.修改项目的web.xml文件,单位分钟

   

 3.修改Tomcat默认配置,单位分钟,默认30分钟

HttpSession中的常用方法

什么是一次会话?

  • 一般可以这样理解:用户打开浏览器,在浏览器上发送多次请求,直到最终浏览器关闭,表示一次完整的回话。
  • 本质上理解:Session对象创建到最终超时销毁,才是真正意义的一次会话;因为即使浏览器关闭,可以通过重写URL的方式从其他电脑其他浏览器同样使用这个Session对象。

 

HttpSession的应用 

 例如:报存用户登录状态,验证用户是否已登录

ServletContext、HttpServletRequest、HttpSession三者共享数据的区别

1.ServletContext、HttpSession、HttpServletRequest对象都是范围对象。
2.ServletContext是应用范围,整个项目、所有的Sevlet、所有的用户共享
3.HttpSession是会话范围,同一个用户、同一个会话中多次请求共享
4.HttpServletRequest是请求范围,单次请求共享(请求转发)
5.三者都可以通过void setAttribute(String name, Object value) 和 Object getAttribute(String name)方法共享数据
6.application完成跨用户共享数据;
7.session完成跨请求共享数据,但是这些请求必须在同一个会话当中;
8.request完成跨Servlet共享数据,但是这些servlet必须在同一个请求当中(请求转发)
   !!!!!使用原则:由小到大尝试,优先使用小范围
 

 

 

 乱码问题

为什么出现请求乱码?

浏览器对请求数据的编码方式和服务器对请求数据的解码方式不同。Get请求的数据在URL中,属于URL编码;Post请求数据的编码方法即页面的编码方式

  • 以Tomcat7.0为例,Tomcat会使用默认的ISO-8859-1进行解码,此时字符集可能与浏览器端编码的字符集不同而出现乱码

解决请求乱码的方法 

(1)适用于Post请求和Get请求

(2)仅支持Post请求

 

(3)仅支持Get请求

修改Tomacat默认的编码字符集

 

 处理响应乱码

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值