zoukankan      html  css  js  c++  java
  • Cookie详解

    一、绪论

    Cookie在远程浏览器端存储数据并以此跟踪和识别用户的机制。

    Cookie是存在客户端上的一小段数据,客户端通过http协议和服务器端进行Cookie交互。

    Cookie独立于语言存在(属于客户端浏览器,不属于哪一门具体语言),严格来说,Cookie并不是由PHP、JSP等语言实现的,而是由这些语言对Cookie进行间接操作(即发送HTTP指令,SET-Cookie 消息报头),客户端收到指令便操作Cookie并返回给服务器。因此,Cookie由客户端(浏览器)实现和管理。关于Cookie的RFC文档主要有:RFC 6265、RFC 2109。

    在PHP中可以使用 setcookie() 或 setrawcookie() 函数设置 Cookie。这两个函数的唯一区别是,setrawcookie不会对Cookie中的value进行 urlencode 转码。

    设置Cookie时需要注意:

    1、这两个函数有返回值

    2、由PHP在当前页设置的Cookie不能立即生效,要等到下一个页面才能看到。因为设置的这个页面里的Cookie由服务器传递给客户端浏览器,在下一个页面浏览器才能把Cookie从客户的机器里取出传回服务器。如果是JS设置的,则立即生效。

    3、Cookie没有显示的删除函数。如果想删除Cookie,应该将Cookie的expire设置为过期时间。

    4、Cookie是HTTP头的一部分,即先发送或请求Cookie,然后才是data域。因此setCookie()等函数必须在其输出数据之前调用,和header()函数是相同的。不过可以使用输出缓存函数延迟脚本的输出,直到设置好所有的Cookie和其他HTTP标头。

    Cookie通常用来存储一些不敏感的信息,或者进行登录控制,也可用来记住用户名、记住免密码登录、防止刷票等。

    每个域名下允许的Cookie是有限制的,根据浏览器的不同有不同的限制个数,超过后就删除旧的,且一个Cookie最大字节数为4097(随浏览器版本更新可能变化)

    注意不要把Cookie当做客户端的存储器使用。

    Cookie是保存在客户端的,一种是文件中,还有是保存在浏览器内存中。因此,关闭浏览器,Cookie并不会随之消失,除非设置该Cookie的expire为空,即随浏览器关闭而消失(即保存在浏览器内存中)。还有一种Cookie由flash创建,即使清空浏览器所有隐私数据,这类顽固的Cookie还会存在硬盘上。它们不受浏览器管理,只受flash管理。

    二、Cookie跨域

    正常的Cookie只能由创建它的应用获得。Cookie的跨域主要是为了统一应用平台,实现单点登录。最简单的方式是使用 P3P 协议。

    所谓跨域,字面上就是分属于不同的域名,但实际上的跨域范畴不仅仅是如此。

    跨域指的是超过了浏览器的同源策略。

    所谓通源指的是“三个相同”:

    1、协议相同

    2、域名相同

    3、端口相同

    目前,如果非同源共有三种行为会受到限制:

    1、Cookie、LocalStorage和IndexDB无法读取

    2、DOM无法获得

    3、AJAX请求不能发送

    如果存在跨域,就需要用 P3P 或 CORS 方案来处理。

  • 相关阅读:
    [linux] 内存检测
    [思维]牛客编程巅峰赛S1第6场
    [逆序数, 思维]牛客编程巅峰赛S1第5场
    [Linux] TrafficControl 流量控制
    [linux]常用指令
    [带权并查集]小白月赛25-C 白魔法师
    初窥原型
    性能测试流程
    JMeter服务器监控技术
    使用Fiddler进行HTTPS抓包和手机APP抓包
  • 原文地址:https://www.cnblogs.com/cshaptx4869/p/10465900.html
Copyright © 2011-2022 走看看