zoukankan      html  css  js  c++  java
  • 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驱动类型。

  • 相关阅读:
    NTP on FreeBSD 12.1
    Set proxy server on FreeBSD 12.1
    win32 disk imager使用后u盘容量恢复
    How to install Google Chrome Browser on Kali Linux
    Set NTP Service and timezone on Kali Linux
    Set static IP address and DNS on FreeBSD
    github博客标题显示不了可能是标题包含 特殊符号比如 : (冒号)
    server certificate verification failed. CAfile: none CRLfile: none
    删除文件和目录(彻底的)
    如何在Curl中使用Socks5代理
  • 原文地址:https://www.cnblogs.com/makalochen/p/12984542.html
Copyright © 2011-2022 走看看