若是没有它,很多网站都会没法登录

今天是刘小爱自学Java的第91天。

感谢你的观看,谢谢你。

话不多说,开始今天的学习:

学cookie之前,我先说一个问题:

如果我设置浏览器不保存cookie。

会发现很多网站都没法登录了。

购物网站购物车里的数据自然也查不到了。

我们做一个测试,使用谷歌浏览器将cookie关闭,操作流程如下图所示:

当设置阻止所有Cookie后,会发现很多网站都没法登录了,今天就学一学这个Cookie。

一、Cookie概述

1Cookie引入

什么叫cookie?

简而言之就是:会话过程中会产生数据,而数据的产生需要保存,就需要使用到cookie技术。

那什么又叫会话呢?

简而言之就是:浏览器请求和服务器响应是一个小循环,一个或多个小循环就是一个会话。

为何阻止Cookie后,很多网站就没法登录了?

因为部分数据是存储在Cookie里的,把它阻止后数据无法存储,自然没法登录了。

总而言之Cookie就是服务器在浏览器上暂时保存的数据,典型例子就是记住用户名和密码。

2记住用户名和密码

我们在网页上登录的时候,如果选择了记住密码,下次登录时就能直接登录。

其数据就是存储在Cookie上的,以此为例编写一个案例:

给登录页面加入了一个单选框,用来说明是否勾选记住密码:

如果勾选了记住密码,服务器就得创建对应的Cookie,这样数据就被存储在浏览器上了。

如果没有勾选记住密码,则无须创建。

接着再来进行代码编写。

二、Cookie基本API

1设定Cookie

获取请求信息

这些方法这在学request时就讲过,不再赘述。

其中单选框用来判断是否需要使用到Cookie,如果被选中,其值为on。

根据请求信息设定Cookie

Cookie对应Java中的一个类,其参数即为一个键值对:

key:该cookie的名称。

value:该cookie对应的值。

设定好Cookie后,将其响应给浏览器就好了。

这样做有什么好处?

下次浏览器再访问服务器时,Cookie中的数据就能直接获取了。

2获取Cookie

获取cookie并遍历

通过请求获取浏览器中本身就存在的Cookie,因为有一个或者多个Cookie,所以是数组。

故需要使用增强for循环遍历。

获取对应的cookie值

Cookie的getName(),获取的是它的名。

Cookie的getValue(),获取的是它的值。

3Cookie的特殊字符

特殊字符

如果直接在Cookie中存入的值包含特殊字符,响应该Cookie时会报错。

编码特殊字符

使用URLEncoder类的encode方法,将其编码:

参数1:需要编码的值

参数2:指定编码字符集

这样就能将特殊字符存入Cookie了。

既然有编码,那么再次使用Cookie的时候肯定就要解码了。

解码

编码对应的是URLEncoder类,方法为encode()

解码对应的是URLDecoder类,方法为decode()

解码后的字符和编码前的字符就一样了。

4Cookie的存活时间&有效路径

现在浏览器中有了一个名为demo的Cookie,若是想将其删除该怎么办?

通过浏览器设置可以删除,通过代码也可以:

创建一个相同名的Cookie

要删除名为demo的Cookie,就可以重新创建一个相同名称的Cookie来代替它。

再将存活时间设定为0即可删除了。

保证有效路径一致

这个因为在创建名为demo的Cookie时并没有设定路径,所以这里可以不写。

但是这个api要知道:

setPath()即为设定Cookie的有效路径。

当设置Cookie的有效路径后,就只能在有效路径或其子路径下访问这个Cookie了。

将存活时间设定为0秒

setMaxAge(0)即设定Cookie存活时间为0。

以上就是对Cookie的说明,除了Cookie可以存储数据外,和其类似的还有一个Session。

三、Session技术

1Session引入

Session与Cookie的功能很相似,区别在于:

Cookie是服务器记录在了浏览器的数据,而Session是服务器记录在服务器上的数据。

那Session到底有什么用呢?先画一张图:

为什么要有Session?

用户A用户B都可以通过同一台电脑的浏览器,登录某个购物网站选东西。

那么用户A如何保证自己在服务器中找到的是用户A购物车的数据而不是用户B的数据呢?

就需要使用到Session了。

Session怎么使用?

用户A访问服务器:

先会自动创建一个唯一的SessionID。

然后将SessionID存储到Cookie中。

最后将Cookie响应到浏览器。

用户A再次访问服务器时,会根据Cookie找到对应的SessionID。

用户B访问服务器时,其Cookie中没有Session数据,就会新创建一个新的SessionID。

等于是说:SessionID是和用户绑定的,这样就不会出现用户之间数据弄混的情况了。

2Session基本API

getSession()方法

其参数一共有三种情况:

无参数时:若是有Session就获取当前Session,若是没有就创建新的Session。

参数为true:同无参数时的效果。

参数为false:若是没有Session不会创建,会返回null。

getId()方法

不用多说,其获取的也就是当前session的id。

invalidate()方法

invalidate,翻译过来就是使之无效的意思。

也就是说该Session对应的id无效了,再次使用getSession()时会重新生成一个新的id。

其中可以使用getSession(false)方法来判断,如果结果为null即id失效了。

最后

时间和精力各方面都受限,Cookie和Session的知识点并没有学全面。

单独再花一天去学又会拖学习进度,鱼与熊掌不可兼得,只能舍弃一部分了,留待以后再总结吧。

谢谢你的观看。

如果可以的话,麻烦帮忙点个赞,谢谢你。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200715A0WO9I00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券