会话技术_Cookie实现的原理及Cookie操作的规则以及常用的API

## Cookie的实现原理
在这里插入图片描述
              (做法是CookieDemo1中发送了Cookie,然后在CookieDemo2中去获取Cookie.其实不管是发送Cookie也好,获取也好,最终他们的体现形式都以http的协议在进行数据的交互,那么一定底层经过http协议的响应和请求来完成的,客户端浏览器首先第一次发送了请求给服务器请求了CookieDemo1的资源,然后CookieDemo1发送了Cookie给客户端,那么发送Cookie里边保存的数据是msg:hello,其实真正发过去的是这么一个玩意,response会给它弄一个响应头,头的名称叫set-cookie,他的值是键值对的形式msg:hello,有了这么一个响应头之后,把这个数据就发给浏览器了,浏览器将来会收到这个响应的消息头,发现呀你给了我一个头叫做set-cookie,那么浏览器就知道啥意思了,因为浏览器和服务器之间有http请求协议的约束,http协议里边响应头规定了,如果浏览器收到了一个set-cookie头,他会自动地干一件事,会将这个头里边携带的数据就是msg=hello,将这些数据呢保存到客户端浏览器上,并且下一次在次发送请求后,他会将这个数据带过去的,第二次请求的时候,这个数据会被放到请求里的消息头里边,使用一个消息头叫做cookie头,带的就是msg = hello,带过去了,这都是浏览器自动做的事,带过去之后呢,在服务器里边,我们就可以写代码来获取这么一个请求头里面的数据,但是我们使用的是javaweb里边封装好的API来做的这么一个操作,不需要我们单独再取这个请求头来操作了,简化了我们的开发步骤,所以服务器帮我们干了很多的事,或者说http协议和浏览器帮我们干了很多事,,我们需要关注的其实非常的少,通过API去发送cooie,以及通过API去获取cookie)
              (F12通过抓包观察,第一次请求CookieDemo1时,响应头有set-Cookie如下)
在这里插入图片描述
              (请求Demo2的时候,跑到请求头去了,而响应求头没有)
在这里插入图片描述

## cookie细节
            1.一次可不可以发送多个cookie?
              ※可以
              ※可以创建多个cookie对象,然后使用response调用多次addCookie方法发送cookie即可
在这里插入图片描述
              (访问创建cookie的Servlet)
在这里插入图片描述
在这里插入图片描述
              (访问获取cookie的Servlet)
在这里插入图片描述
在这里插入图片描述

            2.cookie在浏览器中保存多长时间?
              1.默认情况下,当浏览器关闭后,cookie数据被销毁(可以看出cookie
数据是保存在浏览器中的,浏览器关了内存被释放了cookie数据就没有了,)
              2.持久化存储:
                ※setMaxAge(int seconds)
                 1.正数;将cookie数据写到硬盘的文件中。持久化存储.cookie存活时间。比如传30,,3秒后,这个文件就自动删除掉
                 2.负数:默认值
                 3.零:删除cookie信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
              (把浏览器关掉,再打开.在30秒内继续访问demo2,还是可以查到数据的)
在这里插入图片描述
              (浏览器一关数据就没了)
在这里插入图片描述
            3.cookie能不能存中文?
                ※在Tomcat8版本之前 cookie中不能直接存储中文数据
                  ※需要将中文数据转码------一般采用URL编码(%E3)
                ※在Tomcat8之后,cookie支持中文,特殊字符如空格还是不支持,建议URL编码存储,URL解码解析
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
            4.cookie获取的范围是多大(共享问题)?
              1.假设在一个tomcat服务器中,部署了多个web项目,那么这些web项目中cookie能不能共享?
                ※默认情况下是不能共享的

                ※setPath(String path):设置cookie的获取范围。默认情况下,会自动设置当前的虚拟目录,/day16

                ※如果要共享,则可以将path设置为“/”,它代表了当前的项目的根路径,也是整个服务器的项目都可以共享

              2.不同tomcat服务器间cookie共享问题?
              (举个例子,假如说,新闻的百度,和贴吧的百度是分别部署在不同的服务器上,他们之前的cookie肯定也是要共享的,因为他们都归属于百度这同一个大的项目,怎么共享呢,就用到域名。tieba.baidu.com,baidu.com称为1级域名,tieba为二级域名,那么同理,news.baidu.com,baidu.com称为1级域名,news为二级域名,我们就只需要去设置cooie的一个方法就可以了)

                ※setDomain(String path):如果设置一级域名相同,那么多个服务器之前cookie就可以共享
                   ※setDomain(“.baidu.com”),那么,tieba.baidu.com和news.baidu.com中cookie可以共享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值