开发api无法使用session,尝试了很多办法
1. 运行环境
1). 当前使用的 Laravel 版本?
Laravel Framework 8.83.25
2). 当前使用的 php/php-fpm 版本?
PHP 版本:PHP 8.1.8 (cli)
php-fpm 版本:
3). 当前系统
windows 11 家庭中文版
4). 业务环境
开发环境
5). 相关软件版本
nginx:1.22.0
mysql:8.0.29
redis:3.2.1
2. 问题描述?
在同一个方法中使用session可以设置,获取,再其他方法使用session获取为null
按照文档,百度,打开以前的项目看了,该加的中间件都已经添加,该做的都做了,比如在A控制器里登录用户成功后保存用户信息到session,保存完之后用get即可获取,但是在B控制器里get输出确为空,谢谢帮我看一下
3. 您期望得到的结果?
可以正确获取到session
session 不是保存到文件的吗?看有没有保存到。
不如读一下
session
函数我觉得你第一个图应该是想 put 的。
session()->put('aaa','111');
试试这样我记得在API的路由中,所有的请求和响应都不会加载cookie里面的,你即使开启了session以后,在响应的同时是不会响应回去的
把web的第二个中间件加到api中间件里试下。用laravel的api的话,就不要用session和cookie了吧
1. 服务端设置session后,是否写入成功 2. 服务端设置session后,服务端响应是否有setcookie 3. 前端页面第2次请求,是否成功携带cookie至服务器 4. 服务端获取到前端携带的cookie,是否与服务端设置cookie一致 5. 如果cookie一致的话,可以通过session获取到存储的数据 ----- 注意点: 1. 如果在开发阶段,可以先暂时将cookie加密关闭 2. 服务端设置session成功的话,可以响应的cookie找到对应的存储载体,查看里面内容 3. 需要保证服务端设置的cookie与前端页面2次请求携带cookie是一致,服务端才可以根据cookie查询到对应的数据
不是将
session id
存入cookie
里的吗@lhnjxdqq 1,写入成功 2.响应包含Set-Cookie 3.请求好像没有携带cookie 4.前端查看没有收到后端发送的cookie但是后端发送了cookie,
@deatil 请求默认是携带的,但是本地获取不到session_id,如果不用session的话,api如何获得用户信息,我用Auth::user()也是为null,看样子和session存不了是一样的问题
哪有开发api用session和cookie的啊 用缓存不行吗
遇到过类似的情况 前后端跨域无法获取session最后解决方案是前端做代理同源解决了 你可以先试试同源有没有这个情况如果没有 就试试我上面的方法
能不能用这个呢 Sanctum API 授权
api 状态应该是无状态,就是不应该发送cookie,session 是基于 cookie的。查看请求 header 中是否有携带SESSIONID 的 cookie,建议使用 jwt 或者 laravel 的 Sanctum API 授权
如果
config/session.php
配置中的encrypt
为true
那么 StartSession 中间件和 EncryptCookies 的顺序很重要,否则当试图从 Cookie 中获取 Session ID 时因为因为解密失败,而导致返回的是 null,框架层会重新生成一个 Session ID!在
api
组中,将StartSession
放在EncryptCookies
的前面试试!withCredentials允许携带ccookie,你保存之后再次请求如果不携带cookie会认为是新的用户,创建新的session_id,检查方式就是查看session_id()是否每次都一致
jtw吧
api 哪里来的session? api要用就用cache
app/Http/Kernel.php
移动端本来就没有session,可以用jwt
域不同了。Session 无法共享
楼主您好,请问问题解决了吗,我现在也遇到了相同的问题,怎么也不好使
app/Http/Kernel.php