zoukankan      html  css  js  c++  java
  • 客户端缓存机制 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 对。

    今日感悟:

    不要为了取悦他人而自我牺牲,

    比如你为了家庭和睦取悦父母,为了寝室团结取悦舍友,为了情侣和谐取悦对象,

    这样你的情绪就会一直被别人所支配,一直活在别人的胁迫之下,到最后你就明白,你所认为的牺牲,

    在别人眼里,其实一文不值

    作者:罗昊 感谢各位阅读学习, 如果有疑问或纠错请在评论区留言与我交流,再次感谢各位读者的支持
  • 相关阅读:
    51nod 1067 Bash游戏 V2
    洛谷 P1454 圣诞夜的极光 == codevs 1293 送给圣诞夜的极光
    bzoj4754: [Jsoi2016]独特的树叶
    bzoj 4241: 历史研究
    bzoj 1266 [AHOI2006] 上学路线
    bzoj4571: [Scoi2016]美味
    bzoj4570: [Scoi2016]妖怪
    51nod 1238 最小公倍数之和 V3
    一个康托展开的板子
    poweroj1745: 餐巾计划问题
  • 原文地址:https://www.cnblogs.com/StanleyBlogs/p/10390307.html
Copyright © 2011-2022 走看看