热搜: 分页类  PHP  Windows补丁  验证码  Jpgraph  替换  收机  windows7  Swift  Laravel 
  • 首 页
  •  
     
    当前位置: 首页 » 编程语言 » PHP教程 » 正文

    Laravel 5.3前端ajax请求,后端丢失session的问题

    放大字体  缩小字体 发布日期:2017-02-05  浏览次数:318
    核心提示:微信的h5产品,使用React+Laravel,一个奇怪的现象是只有正常的http请求,在server端可以得到session数据,所有的fetch api调用都无法得到session数据,导致所有的api调用返回401,需要授权。最初后端认为是前端在fetch调用的时候没有加上credentials参数,导

    微信的h5产品,使用React+Laravel,一个奇怪的现象是只有正常的http请求,在server端可以得到session数据,所有的fetch api调用都无法得到session数据,导致所有的api调用返回401,需要授权。最初后端认为是前端在fetch调用的时候没有加上credentials参数,导致laravel_session cookie没有发送。

    credentials:'same-origin'

    后来前端加上了credentials以后,从微信开发工具里看到,cookie确实发送了,而且包含了laravel_session的cookie,然而后端始终拿不到session数据。搜索了google,stackoverflow和laravel社区,大家有很多类似的情况,但都没结果,有的说在ajax并发请求频繁的时候会出现这种情况,有的说Session Facade不是在所有的地方都可以用,有的说是Laravel 4.x的一个bug,试遍了各种办法,也没解决,最后还是在入口处打了两种请求的callstack,果然发现了不同,正常的请求比api请求多经过了几个middleware的处理,在Http/Kernel.php里为两种请求配置了不同的middleware。

    protected $middlewareGroups = [
            'web' => [
                \App\Http\Middleware\EncryptCookies::class,
                \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
                \Illuminate\Session\Middleware\StartSession::class,
                \Illuminate\View\Middleware\ShareErrorsFromSession::class,
                \App\Http\Middleware\VerifyCsrfToken::class,
                \Illuminate\Routing\Middleware\SubstituteBindings::class,
            ],
    
            'api' => [
                'throttle:60,1',
                'bindings',
            ],
        ];

    重点就是web经过的 EncryptCookies middleware去解密cookie内容,而默认的api是不经过这个步骤的,因为laravel默认api请求是无状态的,需要每一次请求在header携带必要的token完成authentication,知道了原因,改起来很简单,为api请求也加上EncryptCookies的middleware。

    protected $middlewareGroups = [
            'web' => [
                \App\Http\Middleware\EncryptCookies::class,
                \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
                \Illuminate\Session\Middleware\StartSession::class,
                \Illuminate\View\Middleware\ShareErrorsFromSession::class,
                \App\Http\Middleware\VerifyCsrfToken::class,
                \Illuminate\Routing\Middleware\SubstituteBindings::class,
            ],
    
            'api' => [
                \App\Http\Middleware\EncryptCookies::class,
                'throttle:60,1',
                'bindings',
            ],
        ];


    小编为您推荐“Laravel 5.3前端ajax请求,后端丢失session的问题”相关文章

    轻松学习C#的密封类
    轻松学习C#的密封类,对C#的密封类感兴趣的朋友可以参考本篇文章,帮助大家更灵活的运用C#的密封类。

    Ruby实现发送邮件的两个方法
    这篇文章主要介绍了Ruby实现发送邮件的两个方法,本文讲解了使用Net::SMTP、使用ruby gem:mail两种方法实现邮件发送,需要的朋友可以参考下

    C# 多态性的深入理解
    本篇文章是对C#中的多态性进行了详细的分析介绍,需要的朋友参考下

    PHP编写的图片验证码类文件分享
    本文给大家汇总介绍了3种php编写的图片验证码类,代码都非常的简单实用,有相同需求的小伙伴可以收藏下。

    详解Golang编程中的常量与变量
    这篇文章主要介绍了详解Golang编程中的常量与变量,是Go语言入门学习中的基础知识,需要的朋友可以参考下

     
    TAGS: Laravel Ajax
     
     
    猜你想看
     
    更多..
    与本文有关Laravel
    • Laravel专供:实现Schemaless
      之所以要实现 Schemaless,主要是因为在线 DDL 有很多痛点,关于这一点,我在以前已经写过文章,没看过的不妨看看「史上最LOW的在线DDL解决方案」,不过那篇文章主要以介绍为主,并没有涉及具体的实现,所以我写了一个 Laravel 的例子。首先创建测试用的 user
      02-05 关键词:LaravelMySQL
    • 在 thinkphp 中使用 laravel 的全部组件
      作为一个使用 php 作为主力语言的公司,不管怎么说,在一些老的项目中,总会碰到使用 thinkphp 的。那么,热爱 laravel 的你,当你去开发新的 feature 时,大胆的去引入 laravel 的组件吧。不管是对于现在的开发效率,还是日后项目的重构,迁移都是有很大帮助
      02-05 关键词:LaravelThinkPHP
    • 使用 Supervisor 管理 Laravel 队列进程
      Supervisor 是一个 Python 写的进程管理工具,有时一个进程需要在后台运行,挂掉后能够自动重启,那么就需要这么一个监控进程的工具。在 Laravel 开发中,也经常使用到队列监听,配合 Supervisor 来管理 Laravel 队列进程是一个很好的方式。Supervisor的安装1
      02-05 关键词:SupervisorLaravel
    • 升級 Laravel Homestead
      升級 Laravel Homestead
      Laravel Homestead Laravel Homestead 最新版本已經支援熱騰騰的 PHP 7.1,趕快來更新 Homestead 吧。如果還沒用過 Homestead,可以先看看 Laravel 開發環境使用 Homestead 。 升級 Homestead 程式碼先查一下目前使用的程式碼版本,開啟終端機,切換到 Homest
      02-05 关键词:LaravelVagrant
    • Laravel 5.4 正式发布,PHP 开发框架
      Laravel 5.4 正式发布,PHP 开发框架
      Laravel 5.4 正式发布了。有以下更新:Laravel Dusk当编写接口测试时,Laravel 提供了一组有用的帮助方法,用来方便地单击链接,填充表单文件或提交表单。Laravel 使用 Symfony BrowserKit 组件来模拟 Web 浏览器的行为。但是,如果应用程序使用 JavaScript
      02-05 关键词:Laravel
    • [ Laravel 5.4 文档 ] 序言 —— 发行版本说明
      [ Laravel 5.4 文档 ] 序言 —— 发行版本说明
      Laravel 5.4 在 5.3 的基础继续进行优化:在邮件和通知中支持Markdown、浏览器自动测试框架Laravel Dusk、Laravel Mix、Blade“组件”和“插槽”、在广播频道上进行路由模型绑定、在集合中支持高阶消息传递、基于对象的Eloquent事件、任务级别的“重试”和“
      02-05 关键词:Laravel中间件
    • Codeception 2.2.9 发布,全堆栈 PHP 测试框架
      Codeception 2.2.9 发布了,Codeception 是一个全堆栈的 PHP 测试框架。测试示例:?phpclass UserControllerCest {public $class = 'UserController';public function createAction(CodeGuy $I){$I-haveFakeClass($userController = Stub::make('UserControll
      02-05 关键词:Laravel
    • Laravel 中使用 Redis 数据库
      一、前言Redis 是一个开源高效的键值对存储系统,它通常用作为一个数据结构服务器来存储键值对,它可以支持字符串、散列、列表、集合、有序集合。1. 安装 predis/predis在 Laravel 中使用 Redis 之前,你需要通过 Composer 来安装predis/predis包(~1.0):$
      02-05 关键词:RedisLaravel
    • 组合使用Laravel和vfsStream测试文件上传
      核心要点 在应用开发中,测试是很重要的,在诸多的开发工具中,测试驱动开发是很伟大的一项; 测试文件上传并不像人们想象的那么简单; 目前,有很多很棒,但不为大家所熟知的测试工具; Larval能够让请求的校验更容易; 测试并不需要实际的文件系统,因为如
      02-05 关键词:LaravelPHPUnit
    • 辞旧迎新:悟以往之不谏,知来者之可追
      辞旧迎新:悟以往之不谏,知来者之可追
      ? 回首过去的2016年,Laravel版本经历了两次更新,新增了很多新特性,比如用户认证上的优化,中间件组的引入,又比如事件广播优化,模型搜索,邮件对象,API认证等功能组件的支持,以及前端引入Vue.js,Laravel生态系统在不断完善,持续致力于提升开发效率和
      01-06 关键词:Laravel
     
    相关评论
     
    猜你喜欢
     
    网站首页 | 关于我们 | 联系方式 | 使用协议 | 版权隐私 | 网站地图 | 网站留言