客户端缓存机制 - Cookie详解
Cookie
作者:Stanley 罗昊
【转载请注明出处和署名,谢谢!】
Cookie不是内置对象,所以用的时候需要new出来,Cookie是由服务端产生的,再发送给客户端保存,它不是内置对象,却是由服务端产生的,产生完后给了客户端;
它存在于客户端,却不是客户端产生的,是服务端产生的,产生完后给你了
Cookie的作用
Cookie就是我们所理解的缓存,本地缓存;
比如客户端访问服务端,第一次访问结束后,我就会产生一个Cookie,把这个Cookie保留到客户端,打个比方:我第一次打开一个网页去看一个视频,它就需要网络或上网流量请求服务器获取资源,看完后服务端就会将你看的这个视频放到一个Cookie里面,然后发送给客户端,我下次再去看这个视频的时候,我就无需连接网络直接在本地即可观看,所以这就叫服务端产生(请求资源需要请求对应视频的服务器),发送给客户端(请求完毕后【就是看完后】,将资源保存到本地);有点儿像一边看一边下载。
但是它有缺点,它除了能放视频它还能放电影、音乐、文章甚至我们的密码也能放,用户名信息也能放,所以放一些用户信息就比较危险了,比方说我第一次访问网站,我登录了,我的名字叫张三,密码abc,服务端将我的信息放到Cookie里面再发送给客户端,那我以后确实不需要登录了,我就可以直接在本地读取账号密码登录,这样就不安全了,万一别人用你电脑解析破解了。
所以Cookie能提高访问服务端的效率,但是安全性较差!
Cookie内部细节
Cookie内部包含一个key = value,有点像JSON跟MAP,既然它不是内置对象,那是谁提供的呢?
是一个扩展类:java.servlet.http.Cookie对象就是由这个类产生的,类产生对象,这些类跟这些对象的方法:
首先有一个构造方法,public Cookie(String key String value),通过构造方法,你可以写k你也可以写v;
String getName(),这个方法用来获取构造方法里面的key
String getValue(),这个就用来获取里面的值 Value
还有一个Void setMaxAge(int expiry),这个方法是设置最大有效期(单位是 秒)该方法说明:
我现在服务端把一个文件生成一个Cookie发给客户端了,但是它有时间限制,比如规定,30分钟内有效,超过就失效
准备Cookie 增加Cookie 发送Cookie 获取Cookie
1.在服务端准备Cookie
因为是构造方法,直接赋值即可,这里我们就模拟用户名=zs
密码=abc
2.增加Cookie
服务端发送给客户端需要一个内置对象:response.addCookie(Cookie cookie),把对象放进去即可,比如用户的信息做登录保存账号密码的时候用
3.发送Cookie
直接将页面跳转(转发 重定向都可以),比如说我现在服务端有一个Cookie了,我现在不管用转发还是重定向到第二个页面了,那我第二个页面就需要获取该Cookie
Cookie最终要到客户端去,所以我们开始发送Cookie到客户端(转发 重定向都可以,总之你跳转过去就行了):
我这里让它跳到了result.jsp页面了
4.获取Cookie
使用request.getCookie();
因为我们不能获取单个,所以返回必定是数组,获取后我们需要循环遍历出来,这里就假设result.jsp是客户端,因为客户端需要获取Cookie:
因为有key value对,所以我们获取时候也需要全部获取并且打印出来,获取key就cookie.getName(),获取value也就是值 cookie.getValue()即可;
值得注意的是,要获取Cookies不能获取某一个Cookie,只能获取全部Cookie,因为现在还没有提供获取单个Cookie的,比方说我现在客户端放了好多Cookie比如什么视频、用户名密码、图片,我客户端要获取就必须一次全拿到然后后遍历
假设刚才现在客户端现在需要访问服务端,服务端就是我们准备并且增加Cookie的那个页面,在那个页面上我有重定向,重定向到了客户端打印输出了,我们看一下运行结果:
很明显,我们成功的获取到了服务端发来的Cookie;
下面这个则是JSessionId,每一个Cookies都会有一个Name为JSessionId,它也是有key v 对。
今日感悟:
不要为了取悦他人而自我牺牲,
比如你为了家庭和睦取悦父母,为了寝室团结取悦舍友,为了情侣和谐取悦对象,
这样你的情绪就会一直被别人所支配,一直活在别人的胁迫之下,到最后你就明白,你所认为的牺牲,
在别人眼里,其实一文不值