【Cookie和Session的基本使用说明】

一、Cookie和Session的作用

在前面我们讲到了Cookie和Session具体是干什么用的,对于这样的机制有何作用呢?我们试着想想,当我们访问一个需要身份验证的页面时,是否需要对于该页面的每个分支页面都需要重新登录一次呢?显然,这样是很不科学的,因此,Cookie和Session机制就是为了应对这样的场景而产生的。好比于去医院看病挂号,这个挂号这个操作就会发给你一张就诊卡,这张就诊卡就是类似于Cookie这样的机制,当我们访问每个不同的科室(页面)的时候,只需要携带着这张就诊卡,就能够随意访问每个科室(页面),每个科室(页面)会先针对这张就诊卡在Session会话当中查询你的详细个人信息,随后供你进行一系列的操作。这样一来,就可以大大减少多次登录带来的不必要的麻烦。因此,我们用一句话来概括Cookie和Session——为了减少登录之后的身份验证机制。

二、Cookie和Session机制在代码中的使用

Servlet当中提供了几组关键的API,供我们来操作Cookie和Session这个机制。我们先来看看都有哪些API。

 我们先来说说getSession方法,这个方法是相当牛逼的方法,不仅仅能够用于获取服务器上的会话,同时也能够用于创建会话。这个牛逼之处的细节在于参数的设置,如果参数为true,就表示我先从服务器获取,如果获取不到,我就创建出一个会话来,参数设置为false,那就表示我先获取,获取不到那就没了,就没有了后续创建会话的操作。这就类似于首次去一家医院挂号,人家第一次为你办理一张就诊卡~

他的强大之处不仅仅在于只是能创建会话,还可以为创建出来的会话设置一些属性,这个我们稍后来看,我们先了解他具体的创建细节,当我们拿到Cookie当中的SessionId字段的时候,先去服务器上查询当前的SessionId是否真的存在,存在那就先不说了,如果不存在,那就会创建出一个HttpSession对象,并且随机生成一个sessionId,紧接着把这个sessionId作为key,把这个HttpSession作为value,这一个键值对保存到服务器内存(类似于“哈希表”这样的结构)当中。这就完了吗?不不不,再然后,服务器就会返回一个HTTP响应,把sessionId通过set-Cookie字段返回给浏览器,这样浏览器就可以保存这个sessionId到Cookie当中了。

 这个HttpSession对象本质上也是一个“键值对”的结构。允许程序员往这个HttpSession对象中存储任意的键值对数据(key必须是String,value是一个Object)。

HttpSession对象的结构如图:

 在服务器当中存储着多个Session会话,每个SessionId对应一个HttpSession对象,每个HttpSession对象内部又存储着多个由程序猿定义的键值对形式的信息字段。HttpSession里面的每个键值对,称为属性(Attribute)。对于这个属性,HttpSession又提供了两个方法:

 可以通过这两个方法对HttpSession对象中的属性进行新增和获取操作。

 这个方法是用于获取到请求中的Cookie数据,其返回值是Cookie类型的数组。数组中的每个元素又是一个Cookie对象,每个Cookie对象又包含了两个属性,name和value(依然是键值对)。

HTTP请求中的Cookie字段就是按照键值对的方式来组织的。这里的键值对,大概的格式是使用;来分割多个键值对,使用=来分割键和值,这些键值对都会在请求中通过Cookie字段传递给服务器。服务器收到请求之后,就会对Cookie字段进行解析,解析成上述看到的Cookie【】这样的形式。那么我们从Cookie【】中获取我们想要的信息数据呢?

 我们可以遍历Cookie【】数组,对于单个的Cookie对象,通过getName()获取其name,getValue()获取其value。对于拿到的value,如果我们想要修改其value,就可以通过setValue()进行修改,但是Name是不能修改的~~~

 Cookie这里是可以保存任意自定制的键值对,如果是一般的键值对,直接通过getCookies来获取,如果是特殊的键值对(例如表示sessionId的键值对),就无需使用getCookies,而是直接使用getSession,其实就是自动帮我们从Cookie中取sessionId了。

 响应当中就可以根据addCookie这个方法来添加一个Cookie信息到响应报文中,这样,添加进来的键值对,就会作为HTTP响应中的Set-Cookie字段来表示。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值