小弟开发过程中遇到laravel上面不明白的地方,可能是最近才开始用这个框架的原因吧.
对于laravel session的问题还不是很了解,希望有研究laravel框架的朋友可以帮忙解答下我的疑问,
说下小弟开发项目的情况吧.
首先用了 laravel来建立了用户中心系统, 然后通过session保存在redis里面的办法与其他"应用",例如: 文章系统(也是laravel为框架开发)来进行用户的登录信息共享同步.
问题来了:
我发现两个laravel (5.1版本) 项目之间进行session的读写 (我并不清楚session的id是的生成机制跟逻辑) 生成的session跟app/config里面的文件有关. 两个项目随便改下app/config里面的配置文件都会引起session的用户信息无法读取成功.
因为公司的项目不是全部用laravel (起码短期内需要慢慢过渡)那假设, 有些项目使用TP或者CI等框架, 那这些框架要怎样才能成功获取laravel的session呢?
盼望高手指点,谢谢
好,我来了。
此处简单介绍Laravel的Session机制(现学现卖,感谢题主提供机会),以下都以不加密的file模式举例子。
Laravel是如何存储和读取的呢?
先说存储,
我们可以看
\Illuminate\Session\SessionManager
中的createNativeDriver
中调用了FileSessionHandler
类。写入的位置在
PATH\storage\framework\sessions
目录下,以id作为文件名,这个id是从用户的cookie中读取的。写入不介绍了,因为题主想读取,我这先简单介绍下如何读取File中Session的数据。
我们看
\Illumiate\Session\Store
中的loadSession
方法,有一个调用$this->readFromHandler()
函数定义如下:
我们知道如果是File那么用的就是
FileSessionHandler
, 它的read非常简单就是从文件里读数据,完了。
所以实际情况,我们看我目录下面的序列化的session文件.
尝试unserialize,得到结果。
知道laravel存储的位置和算法的话,你沿着Handler的read方法,就可以读取到你自己的framework里了(当然需要做一个适配器进行转换)。
有问题欢迎交流~