当用户未经身份验证时,如何防止 Laravel 设置会话 cookie?

2024-01-13

默认情况下,Laravel 在每个请求上都会设置一个名为 [APP_NAME]_session 的 Cookie。它用于以下功能redirect()->back().

这个 cookie 会阻止我的缓存机制正常工作(FastCGI、Varnish,凡是你能想到的)

如果我百分百确定我不需要它,有没有办法在用户未经身份验证时删除此 cookie,而不阻止他们照常登录?

我想在用户经过身份验证时显示不同的菜单,因此我无法在某些路由上应用不同的中间件。


我创建了一个新类,它扩展了 StartSession 中间件(在app/Middleware/Kernel.php, 在 - 的里面web group).

<?php

namespace App\Http\Middleware;

use Illuminate\Contracts\Session\Session;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cookie;
use Symfony\Component\HttpFoundation\Response;

class StartSession extends \Illuminate\Session\Middleware\StartSession
{
    /**
     * Start the session for the given request.
     *
     * @param Request $request
     * @param  Session  $session
     * @return Session
     */
    protected function startSession(Request $request, $session): Session
    {
        return tap($session, function ($session) use ($request) {
            $session->setRequestOnHandler($request);

            if (Cookie::get(config("session.cookie"))) {
                $session->start();
            }
        });
    }

    /**
     * Add the session cookie to the application response.
     *
     * @param Response $response
     * @param Session $session
     * @return void
     */
    protected function addCookieToResponse(Response $response, Session $session)
    {
        if (!auth()->check()) {
            return;
        }

        if ($this->sessionIsPersistent($config = $this->manager->getSessionConfig())) {
            $response->headers->setCookie(new \Symfony\Component\HttpFoundation\Cookie(
                $session->getName(), $session->getId(), $this->getCookieExpirationDate(),
                $config['path'], $config['domain'], $config['secure'] ?? false,
                $config['http_only'] ?? true, false, $config['same_site'] ?? null
            ));
        }
    }
}

两个重要的部分是:

  • 在 startSession() 中:
if (Cookie::get(config("session.cookie"))) {
    $session->start();
}

此部分可防止在用户尚未经过身份验证时创建会话。

  • 在 addCookieToResponse() 中:
if (!auth()->check()) {
    return;
}

只要用户未经过身份验证,这部分就会阻止 Laravel 设置 cookie。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当用户未经身份验证时,如何防止 Laravel 设置会话 cookie? 的相关文章

  • 如何在 Laravel 5.4 中播种数据透视表?

    我正在关注 Jeffrey Way 撰写的名为 Laracasts 中的增量 API 的教程 Laravel 4 faker 类播种和 Laravel 5 4 之间有不同的编码 我仍然遵循教程 Seeders Reloaded 中的相同代码
  • Laravel 5.4 合并两个集合

    所以我有两个收藏 sales and costs 现在我需要将它们合并为我的一个集合foreach状况 我不确定是否可以在一个集合中使用两个集合foreach 原始查询 Raw MySQL Queries for Sales total s
  • PHP - 解析具有固定列宽的文本文件

    我是 PHP 和 Laravel 的新手 我需要打开文件并解析内容以将它们传递到数据库 文本文件具有固定的列宽 它没有分隔符或标题 我认为使用子字符串并将每个子字符串分配给变量将是正确的方法 但我仍在学习该语言的过程中 我不知道如何实现这一
  • Laravel 4 中检索特定日期范围内数据记录的查询

    我有一张桌子有record date以及对应的amount字段 我试图检索按日期月份分组的总金额 我是 Laravel 新手 在普通 php 中我会使用以下 mysql 查询 gt SELECT MONTH record date YEAR
  • Laravel 自定义授权

    我在这里进行登录验证 LoginData Input except array token if Auth attempt LoginData return success 我的表不同 所以这里我更改表名称auth php table gt
  • Laravel 5 文件下载无效

    使用时Response download下载文件时 我注意到图像和其他二进制文件传输不正确 改变Content Typeheader 没有改变任何东西 也没有明确禁止缓存或强制内容的长度 造成这个问题的原因可能是什么 这个问题的解决方案可以
  • 如何在通过 Laravel Eloquent 方法连接的元素上使用 orderby

    问题是查询无法找到应该与 Laravel Eloquent 中的方法WITH 连接的特定方法 特定方法 特定模型 特定模型 特定方法等 有什么想法如何解决吗 我的代码 SpecificModel
  • Laravel Mongo 多对多关系在哪里不起作用

    我有两个以多对多关系相互关联的 mongo 文档 一个称为律师 另一个称为律师 我的律师模型有 public function cases return this gt belongsToMany App LawCase 我的 LawCas
  • node npm run watch 退出状态 3221225725

    我必须格式化我的驱动器 但我的一个项目不再工作 所有其他相同类型的项目都运行良好 这是 Laravel Vue JS 问题是我无法运行 npm run watch dev 或 production 他们都给出了错误 拉拉维尔 5 7 npm
  • 无法添加 laravel/homestead 盒子。 “SSL 证书问题..”。视窗

    我已经在另外两台机器上安装了 laravel homestead 以前从未见过这个问题 我搜索了又搜索 实施了大量建议的修复方案 但没有任何效果对我有用 我已经安装了 virtual box 和 vagrant 但我陷入了第一个障碍 vag
  • Laravel 集合到数组

    我有两个模型 Post and Comment 许多评论属于一个帖子 我正在尝试以数组形式访问与帖子相关的所有评论 我有以下内容 它提供了一个集合 comments collection post gt comments gt get 我该
  • 如何根据动态列分钟计算 Laravel Eloquent 中不同的日期时间

    我正在尝试基于两个数据库和列进行查询 model gt where response time lt Carbon now gt subMinutes DB raw anotherTable created at gt diffInMinu
  • 作曲家 | laravel 5 - 更新依赖项但框架本身

    我正在为我的项目使用 Laravel 5 的预测试版 我发现 Laravel 5 的应用程序框架在 github 存储库中发生了更改 并且由于它是开发版本 因此预计会经常更改 我的问题是 我可以使用 Composer 只更新特定的依赖项而不
  • Laravel 5 - 更改默认日志位置,将日志文件移至应用程序之外

    如何更改默认日志文件位置
  • updateExistingPivot() 不起作用

    我正在尝试像这样更新数据透视表 public function updatePermission id permissionId permissionValue Input get value user User find id perms
  • Laravel 在 Eloquent 范围和查询中使用 select

    我正在尝试清理我编写的一些代码 这是当前的代码 message Message with comments gt join users messages created by users id gt join team user messa
  • Blade @if 中的 Laravel 会话变量

    当我尝试使用 Laravel Session 在刀片中设置 JS 变量来刷新一些数据时 我在 Laravel 4 2 中遇到了一些奇怪的情况 这很简单 我不知道我错过了什么 目标 在用户注册后立即触发 Javascript 网站浏览 方法
  • Laravel 作业推送至 Amazon SQS 但未处理

    我正在运行 Laravel 5 3 我正在尝试测试队列作业 并且我已将队列配置为使用 Amazon SQS 我的应用程序能够将作业推送到队列中 并且我可以在 SQS 中看到该作业 但它留在那里 从未被处理 我尝试过跑步php artisan
  • 如何在laravel中注册后自动登录

    我在 laravel 中注册用户时遇到问题 user假设是包含所有数组元素的数组 同时自动登录以下代码结果false 数据库中保存的密码是hash make password user id this gt user model gt ad
  • Laravel $request->file() 返回 null

    尝试在后端使用 Laravel 上传文件时遇到问题 Issue Laravel request gt file 方法返回 null Setup 我使用以下方法构建了一个 AJAX 请求超级代理人 https github com visio

随机推荐