Laravel session 获取不到

场景 前后端分离:
laravel:在web中间件路由中储存session,然后前端通过ajax调用laravel Api路由获取不到session信息,
使用web路由测试可以获取到信息,求教,这是什么问题???
session 驱动使用redis

有梦想的闲鱼那也是闲鱼
hankin
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 5

可以在ajax中携带 xhrFields字段

$.ajax({
            type: "POST",
            url: "http://xxx.com/api/test",
           dataType: 'json',
           xhrFields: {withCredentials: true},
           crossDomain: true,
    })
4年前 评论
leo

默认情况下,Laravel 的 api分组的 middleware 没有开启 Session。

4年前 评论

前后端都分离,不用session了撒。使用token了。

4年前 评论

Session默认是由\Illuminate\Session\Middleware\StartSession::class,中间件驱动的,web路由组默认使用了这个中间件,而api路由组是没有启用这个中间件的,如果使用api建议使用token

祥见App\Kernel.php

protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            'throttle:60,1',
            'bindings',
        ],
    ];
4年前 评论
Sparkfly

PHP "native" Sessions

原生的 PHP Session 读取方式:

session_start();

// store session data
$_SESSION['is_login']=1;

Laravel Session

弃用原生 Session,需要加载中间件 Illuminate\Session\Middleware\StartSession 才能生效

读取方式:

// 获取 Session 中的一条数据...
$value = session('key');

// 指定一个默认值...
$value = session('key', 'default');

// 在 Session 中存储一条数据...
session(['key' => 'value']);

Laravel 中 middlewareGroups分组 web 默认包含 StartSession,而分组 api 默认不支持 Laravel Session,虽然可以使用原生 Session ,但是也不推荐。

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!