cookie机制

  1. cookie是如何生成的:正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie支持Web端开发的语言都有创建cookie的方法或函数,以及设置cookie属性和添加自定义属性的方法或函数,最后是将cookie附加到返回客户端的HTTP消息头中。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie
  2. cookie传输: 通过http协议在客户端和服务端之间传输,是附加在http头信息中(请求头和响应头)。浏览器只向服务器发送服务器产生的那些cookie,joes-hardware.com产生的cookie会被发送给joes-hardware.com,不会发送给bobs-books.com或marys-movies.com.
  3. cookie保存:(1)没有设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。
    (2)设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享。
  4. cookie共享问题:多个不同浏览器是无法做到共享cookie的,因为每个浏览器存cookie路径不是一样的,所以无法做到不同浏览器共享cookie。如果是同一种浏览器,多个标签页共享的话,再生成cookie的时候添加cookie的有效期;否则cookie为会话cookie,这种客户端是不会把cookie存到硬盘上的,其他标签也无法获取到cookie。
  5. cookie设置和获取

    setCookie("名称","值",生存时间);

    setcookie("UserName","zs",time()+6);    //过期时间6秒,设置值

    $name = $_COOKIE['UserName'];      //获取cookie值,echo $name;
    更新cookie:利用setcookie重新进行赋值,$path和$domain要一致,不然会产生新的cookie值
    删除cookie:setcookie设置过期时间为 time()-1 即可,,,还可以通过浏览器手动删除。

  6. 补充:    bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [,  bool$secure = false [, bool $httponly = false ]]]]]] )

            $name:指定Cookie的名字
            $value: Cookie的值
            $expire:设置Cookie的过期时间,默认值为0,单位为秒数,没有设置就默认为内存Cookie,必须是time() + ····
            $path: 设置Cookie的有效路径,默认是当前目录或者其子目录有效,也可以指定成整个根目录/,在整个根目录下有效
    echo setcookie('name', 'haier', time()+120, '/homework111/11js');
    //设置path参数在/homework111/11js目录下的文件才能获取到cookie,为他路径下的文件获取不到cookie。

            $domain:设置Cookie的作用域,默认在本域下
            $secure:设置是否Cookie只能通过Https传输,默认值是false
            $httponly:是否只是用http访问Cookie,默认值是false,如果设置成true,那么客户端的js就无法操作这个Cookie了,使用这个可以减少XSS攻击
    cookie还有大小限制,4k,更多的知识点参考第一个链接。

参考的博文有:https://www.cnblogs.com/huchong/p/8481779.html

https://blog.csdn.net/nchu2020/article/details/50535379

https://www.cnblogs.com/mmzuo-798/p/6336695.html

原文地址:https://www.cnblogs.com/bneglect/p/10925871.html