美文网首页
cookie和session区别

cookie和session区别

作者: Mr_Arvin | 来源:发表于2019-03-14 17:37 被阅读0次

    一、COOKIE

    认识

    Cookie英文是曲奇饼、小甜品的意思,在web应用中,也类似于程序大餐中的小甜品,在 Internet 中,Cookie 实际上是指小量信息,是由 Web 服务器创建的,将信息存储在用户计算机上的文件,主要作用是记录web应用中用户的基本信息,也可以叫做浏览器缓存或Cookies。
    web应用都是基于http协议进行网络交互,而http协议对每个web页面提交的信息不会进行记录,而很多网站都有会员功能,如果每次跳转页面的时候都重新提交一次会员信息,那这个工作任务就太繁琐,因此有了Cookie的诞生。web应用程序可以在操作时,由服务器端代码生成一个Cookie信息保存在客户端的浏览器中,生成一个很小的文件,此时的文件存在RAM运行内存中,如果用户关闭浏览器会自动删除Cookie信息;如果程序生成一个带有时间设定的cookie,那么cookie文件将存在物理内存中,下次访问同一个web应用时,在设置时间范围内,web应用仍能获取到cookie信息。

    使用
    (1)创建Cookie值
    //  函数设置Cookie
    Setcookie("标识键值","Cookie值","有效时间","有效作用域 / 表示当前网站下好使");
    //  赋值设置Cookie
    $_COOKIE['标识键值'] = "Cookie值";
    
    (2)修改Cookie值
    //  函数设置Cookie
    Setcookie("标识键值","Cookie新值","新有效时间","新的有效作用域");
    //  赋值设置Cookie
    $_COOKIE['标识键值'] = "Cookie新值";
    
    (3)删除Cookie值
    //  函数设置Cookie
    Setcookie("标识键值","空值",time()-1);
    
    (4)查看Cookie值
    //  查看所有Cookie值
    var_dump($_COOKIE);
    //  查看具体的Cookie值
    var_dump($_COOKIE['键值']);
    
    (5)使用举例
    <?php
        // 增加 Cookie
        // 设置Cookie函数法 setCookie();
        setCookie("test1","test1");
        // 设置Cookie赋值法
        $_COOKIE['test2'] = "test2";
     
        // 修改Cookie
        // 修改Cookie setCookie()
        setCookie("test1","test1->test3");
        // 修改Cookie赋值法
        $_COOKIE["test2"] = "test2->test4";
     
        // 查询所有Cookie值
        var_dump($_COOKIE);
     
        // 查询键值为test2的值
        var_dump($_COOKIE['test2']);
     
        // 删除键值为test1的值
        setCookie("test1","",time()-1);
     
        // 设置test2值为空
        $_COOKIE['test2'] = "";
     
        var_dump($_COOKIE);
    
    Cookie的缺点

    (1)Cookie相对不安全,容易被盗取,泄露个人隐私;
    (2)Cookie必须依赖于客户端,客户端(浏览器)可以关闭Cookie存储功能,如果客户端关闭Cookie,则web应用无法存储Cookie值在客户端本地。

    注意事项

    (1)使用setCookie设置或修改cookie值后,在第一次刷新页面时打印Cookie不会有结果,只在本地生成Cookie文件,第二次刷新的时候才可以获取新增或修改的值。如果使用$_COOKIE新增值或者修改值,在修改后第一次请求就可以获取到结果。
    (2)使用setCookie删除Cookie值时,第一次删除只是删除了文件,在当前代码中打印Cookie数据仍然可以打印出Cookie值,刷新页面,重新访问后,对应的Cookie值已被删除。

    所有只要是setCookie函数作用的值,第一次访问不会产生对应的反应,第二次访问会产生效果。而$_COOKIE操作的数据会在第一次访问直接产生效果。

    二、SESSION

    认识

    Session概念:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。
    Session机制:session内容一般以文件的形式存储于服务器中,而本地浏览器会存储一个与服务器中session文件对应的Cookie值,Cookie存储的是键值为“PHPSESSID”的Seeion_id值,用户在访问web应用时,每次跳转发生http请求时,会自动把这个存储session_id的Cookie值发送过去,因此web应用的所有页面都可以获取到这个SESSION_ID值,也就可以通过session_id获取服务器中存储的session值,当用户关闭浏览器后,cookie存储的session_id自动清除,一般服务器存储的session文件也会在30分钟后自动清除。

    使用

    (1)Session在PHP中使用需要先开启session,因此第一步是开启session,函数是session_start()。在开启session的同时,浏览器会自动生成一个session_id,类似于“negp7iebtghcukaj06butg4a55”。
    (2)添加Session
    $_SESSION['session键值'] = "session值";
    (3)修改session
    $_SESSION['session键值'] = "session新值";
    (4)查看session值
    // 查看全部session
    var_dump($_SESSION);
    // 单独查看键值为test的Session值
    var_dump($_SESSION['test']);
    (5)删除session
    // 删除session值,但保留数据类型
    $_session['session键值'] = array();
    // 删除cookie中的session_id
    $session_id = session_name();
    setCookie($session_id,"",time()-1);
    // 释放当前在内存中已经创建的所有$_SESSION变量,但不删除session文件以及不释放对应的session_id
    session_unset();
    // 删除当前用户对应的session文件以及释放session_id,但内存中的$_SESSION变量内容依然保留
    session_destroy();

    session缺点

    Session完全依赖于Cookie,所以cookie的缺点同样是session的缺点.

    注意事项

    session_start()函数前面不得有任何其他语句。

    三、COOKIE和SESSION的区别

    (1)存储位置:Cookie存储在客户端浏览器中,相对不安全;Session内容所在文件存储在服务器中,一般在根目录下的tmp文件夹中,相对更安全。
    (2)数量和大小限制:Cookie存储的数据在不同的浏览器会有不同的限制,一般在同一个域名下,Cookie变量数量控制在20个以内,每个cookie值的大小控制在4kb以内。session值没有大小和数量限制,但如果数量过多,会增大服务器的压力。
    (3)内容区别:cookie保存的内容是字符串,而服务器中的session保存的数据是对象。
    (4)路径区别:session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到;而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。


    补充:默认情况下,session是以文件形式存储在服务器上的,因此当一个页面开启了session之后,会独占这个session文件,这样会导致当前用户的其他并发访问无法执行而等待。可以采用缓存或者数据库的形式存储来解决这个问题
    setcookie('test','val',time()+2000, '/');
    $_SESSION['test']='val';
    均会自动encode、decode

    原文:https://blog.csdn.net/createNo_1/article/details/80555972

    相关文章

      网友评论

          本文标题:cookie和session区别

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