更新一下:
我的一个项目用的TP2.0开发的,现在要给这项目加一些功能,但是新功能我不想用TP开发了,
想用Laravel,Laravel放在旧项目的一个子目录里,但是为什么无法读取TP的SESSION。
我这样说 会不会更明白一些。
不要告诉存数据库什么的,存不存数据库Laravel的Session都是二次处理过的。。。
有没有人遇到过?
两个项目在同一台服务器,同一个域名,不存在跨域,跨服务器问题,
Laravel好像对session做了特殊处理。
连var_dump($_SESSION)都会出现错误提示。
config/session.php设置files和cookie
只会把其他项目的session给清除掉。。。
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
项目之间Session共用的最佳实践应该是将Session信息存在 诸如Redis 或者数据库中 项目只需读取Redis或者数据库即可
我们这边多台机器使用yii框架,php.ini里面配置的session存到同一个redis,
在多台机器上用框架方法操作session,没有问题.
比较奇怪的是卤煮在一个laravel项目里面设置session存储方式后为什么会影响到其他项目的session...
实际上你这是两个问题:
1、laravel 完全重载了php原有的 session 模块,以致于你在laravel 项目内是无法直接使用 $_SESSION 这个全局变量的。但,laravel 提供的 session 模块语法糖相当丰富,完全能满足绝大部份需求;
2、理论上,你的多个项目设计就有问题,多个项目如果session不共享的话,以文件形式存放,都不应该放在同一个目录,才能避免session冲突以及其它安全性问题; 但如果你想共享,那最好的方式是以数据表的方式存放,这和laravel框架并没有直接的关系
3、既然楼主修改了问题,我也再回答一点:
Laravel 封装了原生的 session 模块,目的是为了安全,把存放在客户端的 cookie (session 本质上是 cookie 里的一种,自行补脑) key 进行了安全封装,带上了自己的 token 上再加密的,所以这种情况下,你TP项目生成的 session 通不过 laravel 的安全验证, laravel 当然就无法读取了,这样应该明白了吧。 如果还不明白的话,去 laravel 框架里查源代码,找到重载的 session 模块看看。
kankana补充的已经差不多了, 我再多说下
内部解析 session 到明文:
1: 拿到 session_id
use Illuminate\Encryption\Encrypter;
$encrypter = new Encrypter(Config::get('app.key'));
$session_id = $encrypter->decrypt($_COOKIE[Config::get('session.cookie')]);
2: 读取 session 内容
$handler = Session::getHandler();
$session = $handler->read($session_id);
$session = unserialize($session);