• HTTP Cookie


    Cookie 指某些网站为了辨别用户身份而存储在用户本地终端(client side)上的数据(通常经过加密)。
     
    Cookie 总是保存在客户端,按存储位置,可以分内存 Cookie 和硬盘 Cookie
    • 内存 cookie 由浏览器维护,保存在内存中,浏览器关闭后消失,其存在时间比较短。
    • 硬盘cookie 保存在硬盘里,有一个过期时间,除非用户手动清理或到了过期时间,硬盘cookie不会被删除。
     
    因为HTTP协议是无状态的,即服务器不知道用户上次做了什么,所以服务器通过设置或读取cookie中包含的信息,借此维护用户和服务器会话中的状态。
     
    Cookie 类型
    Session Cookie
         这个类型的cookie只在会话期间内有效,即当关闭浏览器的时候,它会被浏览器删除。设置session cookie的办法是:在创建cookie不设置Expires即可。
    Persistent Cookie
         持久型cookie顾名思义就是会长期在用户会话中生效。当你设置cookie的属性Max-Age为1个月的话,那么在这个月里每个相关URL的http请求中都会带有这个cookie。所以它可以记录很多用户初始化或自定义化的信息,比如什么时候第一次登录及弱登录态等。
    Secure cookie
         安全cookie是在https访问下的cookie形态,以确保cookie在从客户端传递到Server的过程中始终加密的。这样做大大的降低的cookie内容直接暴露在黑客面前及被盗取的概率。
    HttpOnly Cookie
         目前主流的浏览器已经都支持了httponly cookie。1.IE5+ 2.Firefox 1.0+ 3.Opera 8.0+ 4.Safari/Chrome。在支持httponly的浏览器上,设置成httponly的cookie只能在http(https)请求上传递。也就是说httponly cookie对客户端脚本语言(javascript)无效,从而避免了跨站攻击时JS偷取cookie的情况。当你使用javascript在设置同样名字的cookie时,只有原来的httponly值会传送到服务器。
     
    Cookie 实现
    除了name=value对以外,我们还可以设置Cookie其他属性以支持更丰富的Cookie需求,这些属性通常是浏览器用来判断如何对待cookie,何时删除、屏蔽或者如何发送name-value对给Server。也就是说无论我们设置了某个cookie的多少属性,这些Cookie属性是不会被浏览器发送回给Server的。
     
    Cookie 的缺陷
    • cookie会被附加在每个HTTP请求中,增加了流量
    • 由于在HTTP请求中的cookie是明文传递的,所以安全性成问题(除非使用HTTPS)
    • cookie的大小限制在4k左右,对应复杂的存储需求是不够用的
     
    Cookie 常用场景
    (1)很多网站上的“下次自动登录”功能,就是通过发送保存在cookie中的用户名和密码的某种加密形式的登录凭证
    (2)购物网站在结算时,读取保存在cookie中的购买商品
     
    在 chrome 设置->隐私设置->内容设置->所有cookie和网站数据 查看cookie 结构
     
     
    NSHTTPCookie 中cookie 结构
     
    // cookie 结构
    FOUNDATION_EXPORT NSString * const NSHTTPCookieName;
    FOUNDATION_EXPORT NSString * const NSHTTPCookieValue;
    FOUNDATION_EXPORT NSString * const NSHTTPCookieOriginURL;
    FOUNDATION_EXPORT NSString * const NSHTTPCookieVersion;
    FOUNDATION_EXPORT NSString * const NSHTTPCookieDomain;
    FOUNDATION_EXPORT NSString * const NSHTTPCookiePath;
    FOUNDATION_EXPORT NSString * const NSHTTPCookieSecure;
    FOUNDATION_EXPORT NSString * const NSHTTPCookieExpires;
    FOUNDATION_EXPORT NSString * const NSHTTPCookieComment;
    FOUNDATION_EXPORT NSString * const NSHTTPCookieCommentURL;
    FOUNDATION_EXPORT NSString * const NSHTTPCookieDiscard;
    FOUNDATION_EXPORT NSString * const NSHTTPCookieMaximumAge;
    FOUNDATION_EXPORT NSString * const NSHTTPCookiePort;
     
    // 设置cookie类型
    @property (readonly, getter=isSessionOnly) BOOL sessionOnly;
    @property (readonly, getter=isHTTPOnly) BOOL HTTPOnly;
     
  • 相关阅读:
    tomcat 含中文文件不能下载问题
    【转】解读Tomcat服务器server.xml文件
    java 删除文件和文件夹
    获取tomcat安装地址
    《Zookeeper中间件》Zookeeper整合SpringBoot
    《Zookeeper中间件》Zookeeper源码环境搭建
    《Java基础知识》Java 阻塞队列
    《Zookeeper中间件》Zookeeper安装(linux)
    《RabbitMQ 消息中间件》Rabbit集群架构
    《RabbitMQ 消息中间件》RabbitMQ的应用场景
  • 原文地址:https://www.cnblogs.com/shuleihen/p/4353157.html
Copyright © 2020-2023  润新知