美文网首页
PHP-会话技术

PHP-会话技术

作者: 川少叶 | 来源:发表于2018-01-21 15:27 被阅读26次

    1 概述

    会话技术指的是当一个浏览器与服务器在进行对话的期间(浏览器没有关闭),各个请求不同的脚本间可以共享一些数据,这种技术就称之为会话技术。

    常用的会话技术有两种:
      1.Cookie技术:将数据保存在浏览器上,可以在不同的PHP脚本之间共享浏览器上的数据
      2.Session技术:将数据保存在服务器端,可以在不同的PHP脚本之间共享服务器端的Session数据

    2 Cookie技术

    Cookie是一种由服务器发送给客户端的片段信息,存储在客户端浏览器的内存或者硬盘上;在浏览器发起请求时,通过HTTP请求的头部,将这些片段信息传回到服务器。

    2.1 服务端向客户端添加Cookie

    PHP中,设置Cookie的函数是:

    function setcookie ($name, $value = "", $expire = 0, $path = "", $domain = "", $secure = false, $httponly = false)
    
    setcookie('isLogin', '1', time() + 3600);
    

    设置数组

    setcookie('user[username]', 'Lucy');
    setcookie('user[password]', '123456');
    

    2.2 服务端读取Cookie

    $_COOKIE['username']
    

    2.3 服务端删除客户端Cookie

        $expirtTime = time() - 3600;
        setcookie('username', '', $expirtTime);
    

    3 Session技术

    Cookie技术是在用户客户端的计算机保存资料,所以会引起巨大的争议,用户有权阻止Cookie的使用,使得服务器无法通过Cookie来跟踪用户。

    Session技术是将用户的相关数据放在服务器,服务器会为用户创建一个Session ID,它是一个32位十六进制的字符串。

    使用Session跟踪一个用户,是通过在各个页面中间传递Session ID,并通过Session ID在服务器获得对应的数据。常见的Session ID传送方法有两种:
      1.基于Cookie的方式传递Session ID
      2.通过URL参数进行传递

    3.1 Session的声明和使用

    使用Session技术,必须先调用session_start()函数,将相关的环境变量预先加载。这个函数有两个主要作用:
      1.开始一个会话
      2.返回已经存在的会话

    bool session_start ([ array $options = [] ] ) //PHP 7.0,The options parameter was added.
    

    3.1 Session的写和读

    在调用session_start()函数之后,就可以操作$_SESSION全局数组。

    $_SESSION['username'] = 'admin';
    
    $username = $_SESSION['username'];
    

    3.2 Session注销

    Session注销分成4个步骤:
      1.开启Session
      2.删除所有的Session变量
      3.删除储存在客户端的Session ID
      4.删除储存在服务端的Session文件

    可以使用unset()函数来释放单个 变量,也可以赋值一个空数组,删除所有的变量

    unset($_SESSION['username']);
    
    $_SESSION = array();
    

    如果Session是基于Cookie的,也需要清除Cookie中保存Session ID。

       if (isset($_COOKIE[session_name()])) {
            //路径一定要和php.init设置的一致
            setcookie(session_name(),'', time() - 3600,'/');
        }
    

    删除Session文件

    session_destroy();
    

    最终Session的注销方法:

    function clearSession() {
        session_start();
        $_SESSION = array();
        if (isset($_COOKIE[session_name()])) {
            //路径一定要和php.init设置的一致
            setcookie(session_name(),'', time() - 3600,'/');
        }
        session_destroy();
    }
    

    参考文章

    前端必备HTTP技能之cookie技术详解:https://www.jianshu.com/p/2ceeaef92f20

    相关文章

      网友评论

          本文标题:PHP-会话技术

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