zoukankan      html  css  js  c++  java
  • PHP7 学习笔记(十)会话控制

     防守打法

    1、设置Cookie,【基于内存的Cookie】

    setcookie('Username','tinywan');
    setcookie('Age','24');

    2、查看Cookie存储位置:

    3、读取一个Cookie,(Cookie数据保存在$_COOKIE这个预定义变量中)

    print_r($_COOKIE);
    

    打印结果

    4、关闭浏览器,重新读取,刚才设置的Cookie已经消失,原因:该Cookie是基于内存的

    二、过期时间

    1、设置一个过期时间

    setcookie('Apple',7878,time()+30);
    setcookie('Apple123',7878-60,time()+60);
    setcookie('Apple888',7878-3600,time()+3600);

    2、Https

    setcookie('Http-Cookie001','Http',time()+3600,'/','',false);    // 只在http设置
    setcookie('Https-Cookie002','Https-Values',time()+3600,'/','',true);  //只有在https协议下才会设置

    三、更新和删除Cookie

    四、header设置Cookie

    header('Set-Cookie: age=26');

    存储的Cookie

    响应头部

    2、一个格林过期时间

    header('Set-Cookie: set-age-expire=26;expires='.gmdate('D, d M Y H:i:s GMT',time()+3600));

    header('Set-Cookie: set-name-https=Tinywan;secure;expires='.gmdate('D, d M Y H:i:s GMT',time()+3600).'; domain=.tinywan.com');

     3、数组方式设置

    setcookie('UserTable[Name]','Tinywan',time()+3600);
    setcookie('UserTable[Age]','24',time()+3600);
    setcookie('UserTable[Email]','756684177@qq.com',time()+3600);

     

     

     五、通过JS设置和读取Cookie

    1、直接打印

    2、代码获取

    /**
     * Created by tinywan on 2017/11/16.
     */
    var Cookie = {
        set: function (key, val, expiresDays) {
            // 判断是否设置expiresDays
            if (expiresDays) {
                var date = new Date();
                date.setTime(date.getTime() + expiresDays * 24 * 3600 * 1000); // 格式化时间
                var expiresStr = 'expires=' + date.toGMTString() + ';';
            } else {
                var expiresStr = "";
            }
            //escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。注释:ECMAScript v3 反对使用该方法,应用使用 decodeURI() 和 decodeURIComponent() 替代它。
            document.cookie = key + '=' + encodeURI(val) + ';' + expiresStr;
        },
        get: function (key) {
            // "Apple888=4278; autoLogin=1; auth=1; auth-root=1; age=26; set-age=26; set-age-expire=26; set-age-expire=26; set-name-https=Tinywan; UserTable[Name]=Tinywan; UserTable[Age]=24;"
            // decodeURI() 函数可对 encodeURI() 函数编码过的 URI 进行解码。
            var cookieStr = document.cookie.replace(/[]/g, ''); //空格全局替换为空
            // 把字符串拆分为一个数组
            var cookieArr = cookieStr.split(';');
            var res;
            for (i = 0, len = cookieArr.length; i < len; i++) {
                console.log(cookieArr[i]); // age=26
                var arr = cookieArr[i].split('=');
                if (arr[0] == key) {
                    res = arr[1];
                    break;
                }
            }
            return decodeURI(res);
        }
    };

    测试

    四、Session 回话控制

    1、回话图

    (1)第一次请求(准备回话的时候),PHP首先会检查请求头中是否包含session_id,如果没有,则服务器会在自己的内存里创建一个变量$seeesion_id.

    (2)服务器会把这个$session_id变量发送到浏览器保存,浏览器一般会把这个id保存在Cookie中

    (3)以后的用同一个浏览器再次访问服务器的时候,都会在浏览器HTTP请求头中就会携带Cookie存储的变量$session_tinywan

    (4)服务端的$session_id变量可以存放任意序列化后的数据。

    (5)每次浏览器访问服务器,都可以凭借自己的session_id到服务器的这个变量中获取自己的session变量中存储的信息了

     (6)如果想销毁回话,可以删除回话中的数据,销毁回话文件。

     2、第一次访问

     DEMO001

            // 可以通过调用函数 session_start() 来手动开始一个会话
            session_start();
            // 设置session数据
            $_SESSION['name'] = 'Tinywan';
            $_SESSION['age'] = 24;
            $_SESSION['Github'] = 'github.com/Tinywan';
            echo "Session 的名字:",session_name(),"<br/>";
            echo "Session id:",session_id(),"<br/>";
            // 获取session中的数据
            var_dump($_SESSION);
            return 1;

    请求头中会携带一个cookie

    2、设置一个过期时间

    session_start();
    $_SESSION['cookie_name'] = 'Cookie';
    $_SESSION['cookie_time'] = "1小时";
    //保存一个数组
    $data =[
        'id'=>1002,
        'age'=>24,
        'name'=>"Tinywan"
    ];
    $_SESSION['user1002'] = $data;
    // 设置Session 保存周期
    setcookie(session_name(),session_id(),time()+3600);
    print_r($_SESSION);

    Array
    (
        [name] => Tinywan
        [age] => 24
        [Github] => github.com/Tinywan
        [cookie_name] => Cookie
        [cookie_time] => 1小时
        [user1002] => Array
            (
                [id] => 1002
                [age] => 24
                [name] => Tinywan
            )
    
    )

    3、传递session_id

  • 相关阅读:
    网络基础
    Linux安装Redis
    mongodb——文档操作
    mangodb——集合的操作
    Linux安装MongoDB
    2021-10-14软件设计师
    2021-10-13
    How do you use System.Drawing in .NET Core?
    C# 9.0 新特性
    Mysql存储引擎
  • 原文地址:https://www.cnblogs.com/tinywan/p/7846592.html
Copyright © 2011-2022 走看看