分享

【6月H5博文】理解Cookie

 孔实 2017-07-05

从用户进入一个网站浏览到退出这个网站或者关闭浏览器称为一次会话。会话跟踪指在这个过程中浏览器与服务器的多次请求保持数据共享的状态的技术。从而管理着浏览器客户端和服务端之间会话过程中产生的数据。常用的会话跟踪技术是Cookie与Session。


   cookie技术:会话数据保存在客户端

session技术:会话数据保存在服务端


Session 与 Cookie 的作用都是为了保持访问用户与后端服务器的交互状态。它们有各自的优点,也有各自的缺陷,然而具有讽刺意味的是它们的优点和它们的使用场景又是矛盾的。例如,使用 Cookie 来传递信息时,随着 Cookie 个数的增多和访问量的增加,它占用的网络带宽也很大,试想假如 Cookie 占用 200 个字节,如果一天的 PV 有几亿,它要占用多少带宽?所以有大访问量的时候希望用 Session,但是 Session 的致命弱点是不容易在多台服务器之间共享,所以这也限制了 Session的使用。


Cookie 的作用我想大家都知道,通俗地说就是当一个用户通过 HTTP 协议访问一个服务器的时候,这个服务器会将一些 Key/Value 键值对返回给客户端浏览器,并给这些数据加上一些限制条件,在条件符合时这个用户下次访问这个服务器的时候,数据又被完整地带回给服务器。


这个作用就像您去超市购物时,第一次给您办张购物卡,这个购物卡里存放了一些您的个人信息,下次您再来这个连锁超市时,超市会识别您的购物卡,下次直接购物就好了。


当初 W3C 在设计 Cookie 时实际上考虑的是为了记录用户在一段时间内访问 Web 应用的行为路径。由于 HTTP 协议是一种无状态协议,当用户的一次访问请求结束后,后端服务器就无法知道下一次来访问的还是不是上次访问的用户,在设计应用程序时,我们很容易想到两次访问是同一人访问与不同的两个人访问对程序设计和性能来说有很大的不同。例如,在一个很短的时间内,如果与用户相关的数据被频繁访问,可以针对这个数据做缓存,这样可以大大提高数据的访问性能。Cookie 的作用正是在此,由于是同一个客户端发出的请求,每次发出的请求都会带有第一次访问时服务端设置的信息,这样服务端就可以根据 Cookie 值来划分访问的用户了。


PHP通过 setcookie 函数进行Cookie的设置,任何从浏览器发回的Cookie,php都会自动的将他存储在 $_COOKIE 的全局变量之中,因此我们可以通过 $_COOKIE[‘key’] 的形式来读取某个Cookie值。


PHP中的Cookie具有非常广泛的使用,经常用来存储用户的登录信息,购物车等,且在使用会话Session时通常使用Cookie来存储会话id来识别用户,Cookie具备有效期,当有效期结束之后,Cookie会自动的从客户端删除。同时为了进行安全控制,Cookie还可以设置域跟路径。


setcookie() 函数向客户端发送一个 HTTPcookie。cookie 是由服务器发送到浏览器的变量。


PHP中还有一个设置Cookie的函数setrawcookie,setrawcookie跟setcookie基本一样,唯一的不同就是value的值不会自动进行 URL 编码,因此在需要的时候要手动的进行urlencode。setrawcookie('cookie_name', rawurlencode($value), time()+60*60*24*365);


因为Cookie是通过HTTP标头进行设置的,所以也可以直接使用header方法进行设置。header('Set-Cookie:cookie_name=value');


在PHP中删除cookie也是采用 setcookie 函数来实现。原理:将cookie的过期时间设置到当前时间之前,则该cookie会自动失效,也就达到了删除cookie的目的。setcookie('test', '', time()-1); 也可以直接通过header来删除cookie。header('Set-Cookie:test=1393832059;expires='.gmdate('D, d M Y H:i:s \G\M\T', time()-1));


cookie 中的路径用来控制设置的cookie在哪个路径下有效,默认为’/’,在所有路径下都有。setcookie('CookieName','CookieValue', time() + 3600, '/path');


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多