PHP7 学习笔记(十)会话控制

简介: 防守打法1、设置Cookie,【基于内存的Cookie】setcookie('Username','tinywan');setcookie('Age','24');2、查看Cookie存储位置:3、读取一个Cookie,(Cookie数据保存在$_COOKIE这个预定义变量中)...

 防守打法

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 \G\M\T',time()+3600));

header('Set-Cookie: set-name-https=Tinywan;secure;expires='.gmdate('D, d M Y H:i:s \G\M\T',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

 

目录
相关文章
|
3月前
|
存储 Java 数据库连接
php学习笔记-代码基本语法-day01
本文是关于PHP编程语言的基础语法学习笔记,内容包括PHP的介绍、注释风格、数据类型、命名规范、常量和变量的使用,以及变量和常量相关的常用函数。文中详细解释了PHP的基本语法元素和一些易混淆的概念,如传值赋值与传址赋值、可变变量,以及如何检查变量是否已定义或为空。
php学习笔记-代码基本语法-day01
|
3月前
|
JavaScript 前端开发 安全
php学习笔记-普通表单参数提交获取及页面的重定向和一个登录小demo-day05
本文介绍了PHP中普通表单参数的提交获取、页面重定向的方法,并通过一个登录示例演示了表单参数的封装和页面跳转处理。
|
3月前
|
存储 缓存 数据处理
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
本文介绍了PHP会话控制及Web常用的预定义变量,包括`$_REQUEST`、`$_SERVER`、`$_COOKIE`和`$_SESSION`的用法和示例。涵盖了cookie的创建、使用、删除以及session的工作原理和使用,并通过图书上传的例子演示了session在实际应用中的使用。
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
|
3月前
|
存储 API PHP
php学习笔记-php数组的创建和使用,数组常用函数-day03
关于PHP数组的创建、使用以及常用函数的详细学习笔记。
php学习笔记-php数组的创建和使用,数组常用函数-day03
|
3月前
|
JavaScript Java PHP
php学习笔记-php运算符,类型转换,打印输出语句相较于其他语言的特殊部分-day02
本文是第二天的PHP学习笔记,涵盖了PHP中运算符的使用、类型转换方式,以及打印输出语句的特点,展示了其相较于其他编程语言的一些特殊之处。
php学习笔记-php运算符,类型转换,打印输出语句相较于其他语言的特殊部分-day02
|
3月前
|
SQL 关系型数据库 MySQL
php学习笔记-连接操作mysq数据库(基础)-day08
本文介绍了PHP中连接操作MySQL数据库的常用函数,包括连接服务器、设置字符集、关闭连接、选择数据库、结果集释放、获取影响行数以及遍历结果集等操作。通过书籍查询的实例演示了如何使用这些函数进行数据库操作,并提供了一个PHP操纵MySQL数据库的模板。
php学习笔记-连接操作mysq数据库(基础)-day08
|
3月前
|
前端开发 PHP
php学习笔记-php文件表单上传-day06
本文介绍了PHP文件上传处理流程、预定义变量`$_FILES`的使用、文件上传状态代码以及文件上传实现函数。同时,通过一个文件上传的小例子,演示了文件上传表单的创建、文件上传表单处理的PHP页面编写以及运行测试输出。
php学习笔记-php文件表单上传-day06
|
3月前
|
JavaScript 程序员 PHP
php学习笔记-php自定义函数-day05
本文介绍了PHP自定义函数的创建、调用、参数赋值以及作用域和生命周期,还探讨了`global`和`static`关键字的使用,以及`return`、`exit`和`die`的不同用法。
|
3月前
|
XML SQL PHP
php学习笔记-php字符串及字符串常用函数总结-day04
本文总结了PHP中字符串的三种定义方式和常用字符串处理函数,包括字符串的修剪、转换、长度计算、子串操作、比较、连接、分割及替换等操作。
|
5月前
|
存储 PHP
如何在PHP中恢复现有的会话?
【7月更文挑战第17天】如何在PHP中恢复现有的会话?
40 5