zoukankan      html  css  js  c++  java
  • Cookie

    一、含义

    • HTTP很重要的一个特点就是无状态(第一次见面都是初次见面),如果单纯的希望通过服务端程序去记录每一个访问者是不可能的,所以可以借助一些手段实现,比如cookie
    • Cookie就像是在商店买东西拿到的小票,由商店(Server)发给消费者(Browser),商店不用记住每一个消费者,只需要通过消费者的小票(Cookie)获取之前的消费信息(在服务端产生的数据)

    二、PHP中操作Cookie

    ①header( )方法设置cookie

    <?php
        header('Set-Cookie: foo=bar');
    ?>

    <?php
        //注意:在设置多个相同的键时,会出现覆盖的情况
        header('Set-Cookie: foo=123');
        header('Set-Cookie: foo=456');
        header('Set-Cookie: foo=abc');
    ?>

    ②setcookie( )函数专门用于设置cookie

    <?php
        //setcookie()只传递一个函=参数是删除,因为设置过期时间为一个过去时间
        setcookie('key');
    ?>

    <?php
        //setcookie()传递两个参数是设置cookie
        setcookie('key','value');
    ?>

    <?php
        //setcookie()传递三个参数是设置过期时间,
        //setcookie('key','value',time());默认是会话级别的cookie(关闭浏览器自动删除)
        setcookie('key','value',time()+1*24*60*60);
    ?>

    ③$_COOKIE超全局变量获取客户端提交过来的cookie

    <?php
        var_dump($_COOKIE);
        /*array(3) { 
            ["_ga"]=> string(27) "GA1.1.2107690560.1524190841" 
            ["foo"]=> string(3) "abc" 
            ["key"]=> string(5) "value" 
        }
        */
    ?>

    ④path 设置cookie的作用路径范围

    • /   #表示只要在网站根目录下的所有链接地址都可以访问这个cookie
    • /users #表示只要在users目录下的路径才能访问这个cookie

    ⑤domain 设置cookie的作用域范围

    • demo.io #表示所有的demo.io的子域都可以访问到,比如first.demo.io、four.demo.io
    • bar.demo.dev #表示所有的bar.demo.dev的自愈都可以访问到,比如a.bar.demo.dev、b.bar.demo.dev

    ⑥httponly

    一旦cookie的httponly为真,那么只能在服务端获取,JavaScript无法操作

    ⑦secure

    三、JavaScript中操作Cookie

    ①获取和设置:document.cookie

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <script>
            //新增一条cookie,注意:cookie是有大小限制的,约为4k
            //格式固定:<key>=<value>【;expiress=<GMT格式时间>】【;path=<作用路径>】【;domain=<作用域名>】
            //expires表示cookie失效的时间,默认是关闭浏览器时
            //path表示cookie生效的路径.默认为路径/(根目录)
            //domain表示cookie生效的域名,默认为当前域名
            document.cookie='name=value';
            //获取全部cookie,得到的是字符串,需要自己通过字符串进行解析
            console.log(document.cookie);//name=value
            //注意:当设置多条时,再获取的是全部,而不会被覆盖
            document.cookie='name1=value1';
            document.cookie='name2=value2';
            console.log(document.cookie);//name=value; name1=value1; name2=value2
        </script>
    </body>
    </html>

    ②插件:

    四、Session

    ①含义:由于cookie是在服务端下发给客户端由客户端保存的,也就是说客户端可以对其进行随意操作,包括删除和修改,如果客户端随意伪造一个cookie的话,对于服务端是无法辨别的,就会造成服务端被蒙蔽,构成安全隐患,于是就出现了另外一种基于cookie基础之上的收到session

    ②与cookie的区别:session的数据存在于服务端,cookie存在于本地客户端,存在服务端最大的优势就是,不是用户可以随意更改的,session这种机制会更加适合存放一些属于用户而又不能让用户修改的数据,因为客户端不再保存具体的数据,只是保存一把钥匙,伪造一把可以用的钥匙,可能性是极低的,所以不需要在意

    ③session设置:$_SESSION

    ④session默认是关闭的,开启使用函数session_start( )

    <?php
        session_start();
        $_SESSION['key']='value';
    ?>

    五、案例:模拟去除广告

    方案一:(点击不再显示的时候,马上把广告去掉,下次刷新不再出现广告,直到关闭浏览器,下次登录重新出现广告)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            .ad{
                height:300px;
                background-color:#ccc;
            }
            .ad a{
                float:right;
            }
        </style>
    </head>
    <body>
        <?php if(empty($_COOKIE['hide_ad']) || $_COOKIE['hide_ad']!=='1'): ?>
            <div class="ad">
                <a href="close.php">不再显示</a>
            </div>
        <?php endif ?>
    </body>
    </html>
    <?php
        setcookie('hide_ad','1');
        header('Location: test.php');
    ?>

    方案二:(点击不再显示的时候,需要再刷新一次才能不显示广告,直到关闭浏览器,下次登录重新出现广告)

    <?php
        if(isset($_GET['action']) && $_GET['action']==='close-ad'){
            setcookie('hide_ad','1');
            $_COOKIE['hide_ad']==='1';
        }
    ?>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            .ad{
                height:300px;
                background-color:#ccc;
            }
            .ad a{
                float:right;
            }
        </style>
    </head>
    <body>
        <?php if(empty($_COOKIE['hide_ad']) || $_COOKIE['hide_ad']!=='1'): ?>
            <div class="ad">
                <a href="test.php?action=close-ad">不再显示</a>
            </div>
        <?php endif ?>
    </body>
    </html>
  • 相关阅读:
    mysql安装问题
    决策树算法实现
    安装scipy失败提示lapack not found
    算法复杂度分析中的符号(Θ、Ο、ο、Ω、ω)简介
    VMware 注册码
    chrome浏览器频繁卡死
    dell装系统
    关于scipy包的安装
    pip安装python包时报字符编码错
    linux中mv命令使用详解
  • 原文地址:https://www.cnblogs.com/EricZLin/p/9211623.html
Copyright © 2011-2022 走看看