Thinkphp5 的sesssion在同一个控制器不同的方法无法获取session的原因和对策

这一段在用thinkPHP5开发微信小程序接口的时候,在同一个控制器一个方法中存入session,在另一个方法中取出session,一直都是无法取出。

查阅各种资料得到原因:thinkPHP5里面的session是给浏览器用的,非浏览器的方式是没有办法访问到那个session的,只能用其他方式来代替session。 

对策:

1.(推荐)使用TP5自带的缓存方法

可以完美代替session,甚至可以每条手动设置时间,比session更方便,

(用过tp5自带session的肯定知道,session时间一般是固定的,用起来很僵硬)。

 

//设置缓存(有效期3600秒)

Cache::set('name',$value,3600);

//获取缓存数据可以使用:

Cache::get('name');

提醒一下,如果$value是数组的话要先json_encode()编码成字符串再用

 

2.Redis方法(此方法稍微麻烦一些)

按照教程在服务器上配置好redis数据库

使用方法直接上代码:

//存入redis
//开启redis数据库服务
$redis = new Redis();
//连接ridis数据库
$redis->connect('127.0.0.1', 6379);
//存入数据(有效期3600秒)
$redis->set($sessioncode,$value, 3600);


//取出redis
//开启redis数据库服务
$redis = new Redis();
//连接ridis数据库
$redis->connect('127.0.0.1', 6379);
//取出数据
$data = $redis->get($session);

同样,提醒一下,如果$value是数组的话要先json_encode()编码成字符串再用

 

3.使用memcache

上述三种方法均可,建议使用第一种。

 

 

(本文为原创文章,转载请注明来自:http://www.cnblogs.com/piaobodewu/)

转载于:https://www.cnblogs.com/piaobodewu/p/9321269.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对 ThinkPHP 5 的情况,我可以给出以下的思路: 1.获取已有控制器的类名和方法名。 ```php $controllerName = 'app\controller\YourController'; // 已有控制器的类名 $methodName = 'yourMethod'; // 已有控制器方法名 ``` 2.使用反射机制获取已有控制器方法的参数列表。 ```php $reflectionMethod = new \ReflectionMethod($controllerName, $methodName); $params = []; foreach($reflectionMethod->getParameters() as $param) { if ($param->isDefaultValueAvailable()) { $params[] = $param->getDefaultValue(); } else { $params[] = null; } } ``` 3.使用反射机制获取已有控制器方法的注释,包括路由和参数注释。 ```php $docComment = $reflectionMethod->getDocComment(); preg_match('/@route\W+(.*)/', $docComment, $routeMatch); $route = isset($routeMatch[1]) ? $routeMatch[1] : ''; preg_match_all('/@param\W+(\w+)\W+(\$[a-zA-Z0-9_]+)/', $docComment, $paramMatches); $paramsDoc = []; foreach ($paramMatches[2] as $index => $paramName) { $paramsDoc[$paramName] = $paramMatches[1][$index]; } ``` 4.使用获取到的信息,动态生成新的控制器方法。 ```php $newMethodName = 'newMethod'; // 新的控制器方法名 $newControllerContent = <<<CONTROLLER <?php namespace app\controller; use think\Controller; class NewController extends Controller { /** * $docComment */ public function $newMethodName($paramsDoc) { // 在此处编写新的控制器方法逻辑 } } CONTROLLER; file_put_contents('app/controller/NewController.php', $newControllerContent); // 将新的控制器文件写入磁盘 ``` 需要注意的是,以上代码仅为思路示例,具体实现可能需要根据您的需求进行调整。同时,自动生成的代码需要您自己进行调试和测试,以确保代码的正确性和稳定性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值