tp6用redis存储session

随着业务量的增加,很多时候会需要共享session的情况。共享session,其实就是说多台服务器共用一个session,或者是说一个主域跟多个子域之间共用一个session。工作中用tp也多一些,那么,我就用tp6来给大家讲解一下。
在共享session,我们需要用到redis。这儿我假设大家都能读懂redis,并且也能安装和配置。
1、在 config 目录下的 cache.php 文件中,修改为如下代码

<?php

// +----------------------------------------------------------------------
// | 缓存设置
// +----------------------------------------------------------------------

return [
    // 默认缓存驱动
    'default' => env('cache.driver', 'session'), //小冰 (这儿改为 session)

    // 缓存连接方式配置
    'stores'  => [
        'file' => [
            // 驱动方式
            'type'       => 'File',
            // 缓存保存目录
            'path'       => '',
            // 缓存前缀
            'prefix'     => '',
            // 缓存有效期 0表示永久缓存
            'expire'     => 0,
            // 缓存标签前缀
            'tag_prefix' => 'tag:',
            // 序列化机制 例如 ['serialize', 'unserialize']
            'serialize'  => [],
        ],
        // 更多的缓存连接
        //小冰 主要的在这儿,其实这个就是redis的配置
        'session' => [
            // 缓存主机
            'host'       => '127.0.0.1',
            // 缓存端口
            'port'     => '6379',
            // 缓存密码
            'password'     => '',
            // 缓存数据库
            'select'   => '10',
            // 缓存有效期 0表示永久缓存
            'timeout'   => 0,
            // 缓存前缀
            'prefix'   => '',
            'type'      =>  'redis'
        ],
    ],
     
     //当然,这儿也还可以再写其他的缓存配置
];

2、修改session.php的配置文件 (在 config 目录下的 session.php 文件中)

<?php
// +----------------------------------------------------------------------
// | 会话设置
// +----------------------------------------------------------------------

return [
    // session name
    'name'           => 'PHPSESSID',
    // SESSION_ID的提交变量,解决flash上传跨域
    'var_session_id' => '',
    // 驱动方式 支持file cache
    'type'           => 'cache', //小冰 记住这儿为cache
    // 存储连接标识 当type使用cache的时候有效
    'store'          => 'session', //小冰这儿填写session
    // 过期时间
    'expire'         => 1440,
    // 前缀
    'prefix'         => '',
];

到这儿,配置就已完成了。下面就是实际使用。

3、设置session的内容
在控制器中,我们首先需要引入session的类

<?php
    namespace app\controller;
    use app\BaseController;
    use think\facade\Session;
    use think\facade\Cache;
    
    class Test extends BaseController{
        private $sessionRedis;
        
        public function __construct(){
        	//new \think\cache\driver\Redis(config('cache.stores.session')) 表示引入redis类
            $this->sessionRedis = new \think\cache\driver\Redis(config('cache.stores.session')); //引入redis类
        }
        
        public function testSession(){
            session('key' , 'xiaoming');
        }
        
  
        public function getSessionRedis(){
            $session_id = Session::getId(); //获取sessionid
            $n = $this->sessionRedis->get($session_id);
             var_dump($n);
        }
    }

?>

当然,如果要实现多个子域之间共享session,那么就需要做一些小小的配置。(所谓子域共享,就是 www.xyz.com 跟 abc.xyz.com)是同一个主域
(1) 在php.ini中,做如下配置

session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379" #不带密码
#session.save_path = "tcp://127.0.0.1:6379?auth=youpwd″ #带密码的
session.cookie_domain = tp6.bnc  #把它设置成你的主域即可,设置之后别忘了重启服务
#参考 https://blog.csdn.net/qq_31659985/article/details/97948365?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-97948365-blog-116473625.235^v38^pc_relevant_sort_base2&spm=1001.2101.3001.4242.2&utm_relevant_index=4

#当然,如果你用的是宝塔,那就直接在宝塔上设置。

(2) 在你的php项目中,设置 session 和 cookie 的顶域为主域名。(以tp6 为例)

<?php
	return [
	    // session name
	    'name'           => 'PHPSESSID',
	    // SESSION_ID的提交变量,解决flash上传跨域
	    'var_session_id' => '',
	    // 驱动方式 支持file cache
	    'type'           => 'cache',
	    // 存储连接标识 当type使用cache的时候有效
	    'store'          => 'session',
	    // 过期时间
	    'expire'         => 1440,
	    'domain'         => 'tp6.bnc',
	    // 前缀
	    'prefix'         => '',
	];
?>

在这里插入图片描述
在这里插入图片描述

<?php
// +----------------------------------------------------------------------
// | Cookie设置
// +----------------------------------------------------------------------
return [
    // cookie 保存时间
    'expire'    => 0,
    // cookie 保存路径
    'path'      => '/',
    // cookie 有效域名
    'domain'    => 'tp6.bnc',
    //  cookie 启用安全传输
    'secure'    => false,
    // httponly设置
    'httponly'  => false,
    // 是否使用 setcookie
    'setcookie' => true,
    // samesite 设置,支持 'strict' 'lax'
    'samesite'  => '',
];

经过上面的配置和修改,我们之后存session就能在主域和子域之间共享了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TP6ThinkPHP 6)是一个基于PHP的开源框架,它提供了丰富的功能和工具来简化Web应用程序的开发过程。在TP6中使用Redis可以提高应用程序的性能和可扩展性。下面是一个演示如何在TP6中使用Redis的例子: 首先,确保你已经安装了Redis和PHP的Redis扩展。然后,在TP6的配置文件`config/cache.php`中配置Redis连接信息,例如: ```php return [ // 默认缓存驱动 'default' => env('cache.driver', 'redis'), // 缓存连接方式配置 'stores' => [ // Redis缓存连接配置 'redis' => [ // 驱动方式 'type' => 'redis', // 服务器地址 'host' => '127.0.0.1', // 端口号 'port' => 6379, // 密码 'password' => '', // 缓存前缀 'prefix' => '', // 缓存有效期 0表示永久缓存 'expire' => 0, ], ], ]; ``` 接下来,在控制器中使用Redis进行缓存操作。例如,我们可以在一个控制器方法中设置和获取缓存: ```php <?php namespace app\controller; use think\facade\Cache; class Index { public function index() { // 设置缓存 Cache::store('redis')->set('name', 'John Doe'); // 获取缓存 $name = Cache::store('redis')->get('name'); return 'Hello, ' . $name; } } ``` 在上面的例子中,我们使用`Cache::store('redis')`来指定使用Redis作为缓存驱动。然后,我们可以使用`set`方法设置缓存,使用`get`方法获取缓存。 请注意,以上只是一个简单的示例,你可以根据自己的需求在TP6中使用更多的Redis功能和方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值