今天是刘小爱自学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的知识点并没有学全面。
单独再花一天去学又会拖学习进度,鱼与熊掌不可兼得,只能舍弃一部分了。
谢谢你的观看。
如果可以的话,麻烦帮忙点个赞,谢谢你。