Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当用户不是';t已登录(Laravel 5)_Laravel_Varnish - Fatal编程技术网

当用户不是';t已登录(Laravel 5)

当用户不是';t已登录(Laravel 5),laravel,varnish,Laravel,Varnish,即使用户未登录,Laravel也会设置cookie。这将强制Varnish将每个请求发送到后端。我遇到过一些人()使用package,如果用户没有经过身份验证,它会设置一个X-No-Session头。这是一个Laravel4包,因此我创建了一个中间件,如果用户未经授权,它将设置头 我不知道如何让Varnish仅在未设置头的情况下向后端发送请求。我非常感谢任何指导 编辑: 如果用户未登录,此中间件将设置X-No-Session头: <?php namespace App\Http\Midd

即使用户未登录,Laravel也会设置cookie。这将强制Varnish将每个请求发送到后端。我遇到过一些人()使用package,如果用户没有经过身份验证,它会设置一个
X-No-Session
头。这是一个Laravel4包,因此我创建了一个中间件,如果用户未经授权,它将设置头

我不知道如何让Varnish仅在未设置头的情况下向后端发送请求。我非常感谢任何指导

编辑:

如果用户未登录,此中间件将设置
X-No-Session
头:

<?php

namespace App\Http\Middleware;

use Closure;
use Session;

class StripSessionsIfNotAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(auth()->check()) {
            return $next($request);
        }

        return $next($request)->header('X-No-Session', 'yeah');
    }
}
试着替换

if (req.http. ~ "laravel_session") {
    return (pass);
}
在您的
子vcl_recv
功能中,使用

if (req.http.X-No-Session ~ "yeah") {  
    unset req.http.cookie;  
}  
因此,如果您确实有
X-No-Session
头,那么您将转储cookie。这反过来将不会传递到基于cookies的后端。此时,您正在说如果有cookie,请传递到后端。正如你已经知道的,总会有一块饼干


如果它也有任何帮助

您的想法很好,但主要问题是您必须从后端响应测试
X-No-Session
头,而不是客户端请求。 我已成功地将其重写为以下内容:

sub vcl_backend_response {
    set beresp.ttl = 1d;

    if (beresp.http.X-No-Session ~ "yeah" && bereq.method != "POST") {
        unset beresp.http.set-cookie;
    }

    if (bereq.method == "GET" && bereq.url ~ "\.(png|gif|jpg|css|js|ico|woff|woff2|svg)$") {
        unset beresp.http.set-cookie;
        set beresp.ttl = 5d;
    }

    return (deliver);
}
通过这种方式,来自后端的响应被缓存并从不需要的会话cookie中清除

编辑:顺便说一下,使用

$response->headers->set('X-No-Session', 'yeah');

在Laravel中,中间件也可用于重定向响应。

因此,您可以执行类似于会话怪物的操作。也就是说,设置一个标题,不管其值是否不同,这取决于它们是否经过身份验证。也许发布你的中间件。嘿@DavidT我已经用我的中间件更新了帖子,并尝试替换它。我已经更新了OP中的代码。它现在似乎没有缓存任何东西!如果用gist中的我的VCL文件替换你的VCL文件会发生什么?
$response->headers->set('X-No-Session', 'yeah');