• 14.ThinkPHP cookie和session


    Cookie类操作cookie

    ThinkPHP采用thinkfacadeCookie类提供Cookie支持。位于thinkCookie

    初始化

    配置文件初始化

    配置文件位于配置目录下的cookie.php文件,无需手动初始化,系统会自动在调用之前进行Cookie初始化工作。

    配置文件路径configcookie.php

    <?php
    return [
        // cookie 名称前缀
        'prefix'    => '',
        // cookie 保存时间
        'expire'    => 3600,
        // cookie 保存路径
        'path'      => '/',
        // cookie 有效域名
        'domain'    => '',
        //  cookie 启用安全传输
        'secure'    => false,
        // httponly设置
        'httponly'  => '',
        // 是否使用 setcookie
        'setcookie' => true,
    ];
    

    手动初始化

    // cookie初始化
    Cookie::init(['prefix'=>'think_','expire'=>3600,'path'=>'/']);
    // 指定当前前缀
    Cookie::prefix('think_');
    

    支持的参数及默认值如下:

    // cookie 名称前缀
    'prefix'    => '',
    // cookie 保存时间
    'expire'    => 0,
    // cookie 保存路径
    'path'      => '/',
    // cookie 有效域名
    'domain'    => '',
    //  cookie 启用安全传输
    'secure'    => false,
    // httponly设置
    'httponly'  => '',
    // 是否使用 setcookie
    'setcookie' => true,
    

    设置

    // 设置Cookie 有效期为 3600秒
    Cookie::set('name','value',3600);
    // 设置cookie 前缀为think_
    Cookie::set('name','value',['prefix'=>'think_','expire'=>3600]);
    // 支持数组
    Cookie::set('name',[1,2,3]);
    

    永久保存

    // 永久保存Cookie
    Cookie::forever('name','value');
    

    判断

    Cookie::has('name');
    // 判断指定前缀的cookie值是否存在
    Cookie::has('name','think_');
    

    获取

    Cookie::get('name');
    // 获取指定前缀的cookie值
    Cookie::get('name','think_');
    

    删除

    //删除cookie
    Cookie::delete('name');
    // 删除指定前缀的cookie
    Cookie::delete('name','think_');
    

    清空

    // 清空指定前缀的cookie
    Cookie::clear('think_');
    

    如果不指定前缀,不能做清空操作

    助手函数操作cookie[推荐]

    系统提供了cookie助手函数用于基本的cookie操作,例如:

    // 初始化
    cookie(['prefix' => 'think_', 'expire' => 3600]);
    // 设置
    cookie('name', 'value', 3600);
    //判断
    cookie('?name');
    // 获取
    echo cookie('name');
    //获取全部
    cookie('');
    // 删除
    cookie('name', null);
    // 清除  前缀think_
    cookie(null, 'think_');
    

    例1:

    设置cookie

    //设置cookie key为name value为张三 时间为300秒
    cookie('name', 'zhangsan', 300);
    

    image-20200528215354837

    判断cookie是否存在

    cookie('?name');
    

    image-20200528215920966

    获取cookie

    // 获取
    echo cookie('name');
    

    image-20200528220057326

    删除cookie

    // 删除
    cookie('name', null);
    

    image-20200528220311200

    清除cookie

    注意:如果不指定前缀,不能做清空操作

    // 清除,相当于全部删除
    cookie(null, 'think_');
    

    image-20200528221555507

    Session类操作session

    概述

    可以直接使用thinkfacadeSession类操作Session

    版本 新增功能
    5.1.3 get方法支持获取多级

    Session初始化

    配置文件初始化

    Session会在第一次调用Session类的时候按照session.php配置的参数自动初始化:

    return [
        'id'             => '',
        // SESSION_ID的提交变量,解决flash上传跨域
        'var_session_id' => '',
        // SESSION 前缀
        'prefix'         => 'think',
        // 驱动方式 支持redis memcache memcached
        'type'           => '',
        // 是否自动开启 SESSION
        'auto_start'     => true,
    ];
    

    如果我们使用上述的session配置参数的话,无需任何操作就可以直接调用Session类的相关方法,例如:

    Session::set('name','thinkphp');
    Session::get('name');
    

    手动初始化

    或者调用init方法进行初始化:

    Session::init([
        'prefix'         => 'module',
        'type'           => '',
        'auto_start'     => true,
    ]);
    

    如果你没有使用Session类进行Session操作的话,例如直接操作$_SESSION,必须使用上面的方式手动初始化或者直接调用session_start()方法进行session初始化。

    设置参数

    默认支持的session设置参数包括:

    参数 描述
    type session类型
    expire session过期时间
    prefix session前缀
    auto_start 是否自动开启
    use_trans_sid 是否使用use_trans_sid
    var_session_id 请求session_id变量名
    id session_id
    name session_name
    path session保存路径
    domain session cookie_domain
    use_cookies 是否使用cookie
    cache_limiter session_cache_limiter
    cache_expire session_cache_expire
    secure 安全选项
    httponly 使用httponly

    如果做了session驱动扩展,可能有些参数不一定有效。

    基础用法

    赋值

    // 赋值(当前作用域)
    Session::set('name','thinkphp');
    // 赋值think作用域
    Session::set('name','thinkphp','think');
    

    判断是否存在

    // 判断(当前作用域)是否赋值
    Session::has('name');
    // 判断think作用域下面是否赋值
    Session::has('name','think');
    

    取值

    // 取值(当前作用域)
    Session::get('name');
    // 取值think作用域
    Session::get('name','think');
    

    如果name的值不存在,返回null

    删除

    // 删除(当前作用域)
    Session::delete('name');
    // 删除think作用域下面的值
    Session::delete('name','think');
    

    指定作用域

    // 指定当前作用域
    Session::prefix('think');
    

    取值并删除

    // 取值并删除
    Session::pull('name');
    

    如果name的值不存在,返回Null

    清空

    // 清除session(当前作用域)
    Session::clear();
    // 清除think作用域
    Session::clear('think');
    

    二级数组[推荐]

    支持session的二维数组操作,例如:

    // 赋值(当前作用域)
    Session::set('name.item','thinkphp');
    // 判断(当前作用域)是否赋值
    Session::has('name.item');
    // 取值(当前作用域)
    Session::get('name.item');
    // 删除(当前作用域)
    Session::delete('name.item');
    

    助手函数session

    系统也提供了助手函数session完成相同的功能,例如:

    // 初始化session
    session([
        'prefix'     => 'module',
        'type'       => '',
        'auto_start' => true,
    ]);
    
    // 赋值(当前作用域)
    session('name', 'thinkphp');
    
    // 赋值think作用域
    session('name', 'thinkphp', 'think');
    
    // 判断(当前作用域)是否赋值
    session('?name');
    
    // 取值(当前作用域)
    session('name');
    
    // 取值think作用域
    session('name', '', 'think');
    
    //获取全部
    session('');
    
    // 删除(当前作用域)
    session('name', null);
    
    // 清除session(当前作用域)
    session(null);
    
    // 清除think作用域
    session(null, 'think');
    

    session闪存

    闪存数据,下次请求之前有效

    // 设置session 并且在下一次请求之前有效
    //在定义好后和下一次可以获取,下第二次就获取不到了
    Session::flash('name','value');
    

    提前清除当前请求有效的数据

    // 清除当前请求有效的session
    Session::flush();
    

    image-20200528223910882

    Session驱动

    支持指定 Session 驱动,配置文件如下:

    return [
        'type'       => 'redis',
        'prefix'     => 'module',
        'auto_start' => true,
         // redis主机
        'host'       => '127.0.0.1',
         // redis端口
        'port'       => 6379,
         // 密码
        'password'   => '',
    ]
    

    表示使用redis作为session类型。

    目前内置支持使用redismemcachememcached作为session驱动类型。

  • 相关阅读:
    python 字符串中的%s与format
    python中的virtualenv是干嘛的?
    grep 与 find 简单命令
    git merge 和 git rebase的区别
    git stash的用法
    git push的用法
    git pull与git fetch的区别
    辟谣平台 踩坑记(一)
    微信JS-SDK开发 入门指南
    linux 写U盘出现的问题
  • 原文地址:https://www.cnblogs.com/makalochen/p/12984542.html
Copyright © 2020-2023  润新知