美文网首页PHP
PHP Cookie相关

PHP Cookie相关

作者: MangfuStudio | 来源:发表于2018-08-22 23:47 被阅读0次

    Cookie ?

    百度百科:Cookie
    维基百科:Cookie
    我的个人理解:

    1. cookie 是存储在客户端(一般是浏览器)的一段小文本
    2. cookie 由服务端发送給客户端,发送方式:http头
    3. 如果客户端中存储着站点的cookie,每次访问此站点都会带上cookie

    举个例子
    你是酱油铺的老板,每天都会有十几个戴着面具和穿这衣服的人来打酱油(假设面具与衣服一模一样,你辨认不出来),但酱油铺每天的存货有限,每人每天只能打一瓶酱油。现在有个不坏好意的人想一天打多瓶酱油,让酱油铺缺货,从而导致后面的客人无法买到酱油,你为了遏止这种恶意行为,在每位已经购买了酱油的客人做了一个标记,以这种方法来辨别客人是否已经购买酱油,保证了购买的公平性。
    当然,上面的例子是我随意构造出来的,比喻并不是很准确。
    在上面的例子中,酱油铺老板就是服务端,客人就是客户端,那个标志就是cookie。

    为什么需要cookie?
    “需求-供应” 关系永远都不会变,有需求就有供应,cookie技术的出现也不例外。
    web世界中,传输WWW文件(html,javascript,css,image.......)使用的是HTTP协议,而HTTP协议是无状态协议,也就是说,就算你客户端与服务端刚刚传输了文件,你再次发送请求,服务端也不会记得“你丫的是谁”。那要是我开发的网站一定要服务端“辨别”出客户端呢?那就开个新技术咯

    这很OK
    所以cookie就被搞出来了。就像酱油店的老板的做法一样。下次客户端访问服务端的时候就会带上服务端给的cookie,服务端通过cookie就可以辨认客户端了。

    相关函数

    • setcookie() -- 设置Cookie
    // 函数原型
    setcookie($cookieName [,$cookieValue="" [,$expire=0 [,$path="" [,$domain="" [,$secure=false [,$httponly=false]]]]]])
    

    相关数组

    • $_COOKIE[ ] -- 保存cookie相关信息

    设置一个简单的cookie

    <?php
    $returnValue = setcookie('cookie_1'); // cookie名称为cookie_1 值不设置
    var_dump($returnValue); // 打印setcookie()返回值
    ?>
    
    //运行结果
    D:\WampServer\www\MyPhpCode\01.php:33:boolean true
    
    cookie信息

    为cookie设置值

    <?php
    $returnValue = setcookie('cookie_2','cookie_2_value'); // cookie名称:cookie_2 , cookie值:cookie_2_value
    var_dump($returnValue);
    ?>
    
    // 运行结果
    D:\WampServer\www\MyPhpCode\01.php:28:boolean true
    
    cookie详细

    细心的读者可能发现了一个问题:之前创建的cookie_1到哪里去了?
    emm...... 消失了,对的,它已经人间蒸发了。

    人间蒸发????那我这么辛苦的码了两行代码才搞到客户端里的小饼干(cookie)就这么没了???

    **


    再运行下php脚本,火速到浏览器查看下cookie。
    Image cookie到期时间为“浏览器回话结束”,嗯哼,那么说我的小饼干会在页面关闭后消失咯。 。。。。。
    怎么玩?唯有续命
    给小饼干续命就用第三个参数 expire
    expire参数设置cookie的有效期,也就是小饼干更可以活多久,至于活多久,就由你来决定了。
    注意:此参数接收时间戳。php会内部转换日期。

    为cookie设置到期时间

    <?php
    $returnValue = setcookie('cookie_3','cookie_3_value',time()+30); // cookie有效时间为 30 秒
    var_dump($returnValue);
    ?>
    

    time()函数用于获取当前时间的时间戳

    cookie详细
    <?php
    /**
     * 此php用于获取上面的设置的cookie(cookie_3)的值
     * 获取方式:$_CIOOKIE[]
     * 要在cookie_3创建30秒内获取,不然你会收到错误:‘Notice: Undefined index: cookie_3 ’
     */
    $cookieName = "cookie_3" ;            // 要获取的cookie的名称
    $cookieValue = $_COOKIE[$cookieName]; // 获取对应值
    var_dump($cookieValue);
    ?>
    
    // 输出
    D:\WampServer\www\MyPhpCode\02.php:5:string 'cookie_3_value' (length=14)
    

    等等 ???cookie不是保存在客户端的么,php运行在服务端,为什么php可以搞到客户端的cookie??。那是因为客户端访问服务端时会带上cookie。

    恍恍惚惚 反反复复

    为cookie设置路径

    路径,哦~~,cookie在客户端的存储路径而已,路径这种东西我早就知道了,不用说了。 呵,年轻人

    其实cookie的路径并不是指客户端的存储路径,而是指php脚本在服务器的路径。看下面操作。

    网站结构
     WWW
     |
     |- MyPhpCode
     |  |- 01.php
     |  |- 02.php
     |
     |- MyPhpCode2
     |  |- 01.php
    
    

    网站根目录:WWW
    /MyPhpCode/01.php:创建cookie
    /MyPhpCode/02.php:获取cookie值
    /MyPhpCode2/01.php:获取cookie值

    现在用/MyPhpCode/01.php来设置一个cookie,然后使用/MyPhpCode2/01.php来读取cookie看看结果如何

    <?php
    /**
     * /MyPhpCode/01.php
     */
    $returnValue = setcookie('cookie_4','cookie_4_value',time()+60,'/MyPhpCode'); // 指定路径为 /MyPhpCode
    var_dump($returnValue);
    ?>
    
    cookie详细
    /**
     * /MyPhpCode2/01.php
     */
    <?php
    $cookieName = "cookie_4" ;
    $cookieValue = $_COOKIE[$cookieName]; // 获取 cookie_4的值
    var_dump($cookieValue);
    ?>
    
    // /MyPhpCode2/01.php 输出
    D:\WampServer\www\MyPhpCode2\01.php:5:null
    同时还报了 Notice: Undefined index: cookie_4 错误
    

    并不能读取cookie_4的值

    现在用 /MyPhpCode/02.php 来尝试下

    /**
     * /MyPhpCode/02.php
     */
    <?php
    $cookieName = "cookie_4" ;
    $cookieValue = $_COOKIE[$cookieName]; // 获取 cookie_4的值
    var_dump($cookieValue);
    ?>
    
    //  /MyPhpCode/02.php 输出
    D:\WampServer\www\MyPhpCode\02.php:5:string 'cookie_4_value' (length=14)
    

    以上对比可以看出,如果设置了cookie的路径,要与设置cookie的php处于同于路径之下才有权访问cokie。

    到这里,PHP中cokie的操作已经介绍的 七七八八了 ,至于setcookie() 函数后面几个参数,哼哼哼哼哼哼哈哈哈哈哈哈哈哈哈,我也不太了解,这么跟你说吧,我就是半吊子。等有空学下其他的cookie操作再续写文章了。

    -

    今天没有总结,再见。 告辞

    相关文章

      网友评论

        本文标题:PHP Cookie相关

        本文链接:https://www.haomeiwen.com/subject/isieiftx.html