• ThinkPHP5的session或cookie无效


    Session的使用

    下面使用静态方法调用Session;推荐使用$_SESSION(查看全部session),可以更好了解session的作用域

        //赋值
            Session::set('name','s1');
            //赋值think2作用域,set(‘名称’,‘值’,‘作用域’)
            Session::set('name','s2','think2');
    
            //判断当前作用域(think)是否赋值
            echo Session::has('name');
            //判断think2作用域是否赋值
            echo Session::has('name','think2');
    
            //取值,当前作用域(think)
            echo Session::get('name');
            //取值(think2作用域)
            echo Session::get('name','think2');
    
            // 二维数组,赋值(当前作用域)
            Session::set('name2.item','thinkphp');
            // 判断(当前作用域)是否赋值
            Session::has('name2.item');
            // 取值(当前作用域)
            Session::get('name2.item');
    
            //删除(当前作用域)
            Session::delete('name');
            //删除(think2作用域)
            Session::delete('name','think2');
            //清除(当前作用域)
            Session::clear();
            //清除(当前作用域)
            Session::clear('think2');
            
            echo '<pre>';
            print_r($_SESSION);

    函数助手调用Session

        // 赋值(当前作用域)
            session('name', 'thinkphp');
            echo $this->request->session('name');
    
            // 赋值think作用域
            session('name', 'thinkphp', 'think');
            // 判断(当前作用域)是否赋值
            echo session('?name');
            // 取值(当前作用域)
            echo session('name');
            // 取值think作用域
            echo session('name', '', 'think');
            // 删除(当前作用域)
            session('name', null);
            // 清除session(当前作用域)
            session(null);
            // 清除think作用域
            session(null, 'think');
    
            echo "
    ";
            print_r($_SESSION);

    设置有效时间:

        //方法一:application/index/config.php(全局设置)
        'session'                => [
            'id'             => '',
            // SESSION_ID的提交变量,解决flash上传跨域
            'var_session_id' => '',
            // SESSION 前缀
            'prefix'         => 'index',
            // 驱动方式 支持redis memcache memcached
            'type'           => '',
            // 是否自动开启 SESSION
            'auto_start'     => true,
            //过期时间 单位秒
            'path'=>TEMP_PATH,//表示session保存在自己网站根目录中的runtime目录中
            'expire'=>3600*24*30,//过期时间
        ],
    
        //方法二:控制器
        session(array('user'=>$user,'expire'=>3600));
    
        //方法三:控制器
        Session::init([
           'expire'=>60*60*12
        ]);
        Session::set("token",$access_token);
        

    注意: 如果expire => 0,则默认session的过期时间

    Cookie的使用

    下面使用静态方法调用Cookie;推荐使用$_COOKIE(查看全部cookie)

        //设置Cookie 有效期为 3600秒
            Cookie::set('user_name','TPshop 团队',3600);
            // 设置cookie 前缀为think_
            Cookie::set('user_name','TPshop 老师',['prefix'=>'think_', 'expire'=>3600]);
            // 支持数组
            Cookie::set('Teacher',['zhang','wang','chen','peng']);
            echo Cookie::get('user_name'); // 也支持使用Cookie类直接读取
            echo "<br/>";
            // 获取指定前缀的cookie值
            echo Cookie::get('user_name','think_');
            echo "<br/>";
            // 建议的读取Cookie数据的方法是通过Request请求对象的cookie方法
            echo $this->request->cookie('user_name');
            echo "<br/>";
    
             //判断
            echo Cookie::has('user_name');
            echo "<br/>";
            //判断指定前缀的cookie值是否存在
            echo Cookie::has('user_name','think_');
            echo "<br/>";
    
           //删除cookie
            Cookie::delete('user_name');
           // 删除指定前缀的cookie
            Cookie::delete('user_name','think_');
    
           // 清空
           // 清空指定前缀的cookie
            Cookie::clear('think_');

    使用函数助手调用Cookie

        // 助手函数
            // 初始化
            cookie(['prefix' => 'think_', 'expire' => 3600]);
            // 设置
            cookie('name', 'value123', 3600);
            // 判断
            echo cookie('?name');
            echo "<br/>";
            // 获取
            echo cookie('name');
            echo "<br/>";
            // 删除
            cookie('name', null);
            // 清除
            cookie(null, 'think_');

    设置有效时间: 

    //方法一:在控制器 cookie初始化
    Cookie::init(['prefix'=>'think_','expire'=>3600,'path'=>'/']);
    // 方法二:设置Cookie 有效期为 3600秒
    Cookie::set('name','value',3600);
    
    //方法三:config.php设置
    'cookie'                 => [
            // cookie 名称前缀
            'prefix'    => '',
            // cookie 保存时间
            'expire'    => 0,
            // cookie 保存路径
            'path'      => '/',
            // cookie 有效域名
            'domain'    => '',
            //  cookie 启用安全传输
            'secure'    => false,
            // httponly设置
            'httponly'  => '',
            // 是否使用 setcookie
            'setcookie' => true,
        ],

    注意:'expire' => 0,默认cookie的过期时间为关联浏览器

    session或cookie无效

    一般情况下session和cookie都有效的,但今天我遇到了session和cookie不能保存数据。

    这种情况一般是config.php的设置的问题,下面让大家看看我发现的问题:

    这里设置里有效域名x.com,但我当前的域名是ljt.com;知道问题就好解决,只要把有效域名改成ljt.com,或者domain => "" 什么都不写

    总结

    session:存放在服务器

    cookie:存放在浏览器

    Cookies生存期限就到你关闭浏览器为止

  • 相关阅读:
    Windows API 中 OVERLAPPED 结构体 初始化
    QString 转换成 wchar 的一个小陷阱
    Windows VHD Create, Attach, 获得Disk序号
    Programmatically mount a Microsoft Virtual Hard Drive (VHD)
    chcp437 转换英语,在西班牙语系统中无效
    Windows 版本 Enterprise、Ultimate、Home、Professional
    openssl 查看证书
    Ubuntu 搜索文件
    微软的 Sysinternals 系统管理工具包,例如可找出自动启动的流氓软件
    HTML 表格实例
  • 原文地址:https://www.cnblogs.com/bushui/p/11845626.html
Copyright © 2020-2023  润新知