Laravel在每次刷新时创建新的CSRF令牌

Laravel在每次刷新时创建新的CSRF令牌,laravel,Laravel,我使用的是Laravel版本5.2.37。我在blade视图中有一个简单的HTML表单,如下所示: <input type="hidden" name="_token" id="token" value="{{ csrf_token() }}"> 当我上传代码到客户端的共享主机(Cpanel,php5.5.36)时,没有提交表单,我点击了刷新,csrf令牌值不断变化 但是,在我的本地计算机(MacOS/Apache2/5.6.16)上,csrf令牌至少会持续2分钟(根据conf

我使用的是Laravel版本5.2.37。我在blade视图中有一个简单的HTML表单,如下所示:

<input type="hidden" name="_token" id="token" value="{{ csrf_token() }}">

当我上传代码到客户端的共享主机(Cpanel,php5.5.36)时,没有提交表单,我点击了刷新,csrf令牌值不断变化


但是,在我的本地计算机(MacOS/Apache2/5.6.16)上,csrf令牌至少会持续2分钟(根据config/session.php设置)。是否是较早的5.5.36版本的PHP导致了这种情况?

尝试在config/session.PHP中定义正确的“域”。默认情况下,它被设置为null,但在服务器上,您应该清除它。

尝试在config/session.php中定义正确路径的“域”。默认情况下,它被设置为null,但在服务器上,您应该清除它。

嗯,我终于找到了答案。愚蠢的我制作了一个自定义助手,其功能如下:

<?php
function doSomething($arg)
{
    ?><p>When this function is called, 
    display <b><?php echo $arg; ?> value.</b></p>
    <?php
}
?>
调用此函数时, 显示值

您可能已经在WordPress中看到过很多这样编写的函数。虽然它不是artisan代码,但在大多数情况下,它都可以正常工作,但是Laravel在与助手打交道时不会容忍这种胡说八道。因此,在我编写函数返回字符串后,一切都恢复正常:

<?php    
function doSomething($arg)
{
    return '<p>When this function is invoked, 
    display <b>' . $arg . '</b> value.</p>'; 
}    
?>


故事的寓意——不要写难看的代码。确保你的函数返回并且从不直接回显/打印字符串,尤其是使用帮助函数。

我终于找到了答案。愚蠢的我制作了一个自定义助手,其功能如下:

<?php
function doSomething($arg)
{
    ?><p>When this function is called, 
    display <b><?php echo $arg; ?> value.</b></p>
    <?php
}
?>
调用此函数时, 显示值

您可能已经在WordPress中看到过很多这样编写的函数。虽然它不是artisan代码,但在大多数情况下,它都可以正常工作,但是Laravel在与助手打交道时不会容忍这种胡说八道。因此,在我编写函数返回字符串后,一切都恢复正常:

<?php    
function doSomething($arg)
{
    return '<p>When this function is invoked, 
    display <b>' . $arg . '</b> value.</p>'; 
}    
?>


故事的寓意——不要写难看的代码。确保你的函数返回并且从不直接回显/打印字符串,尤其是使用帮助函数。

提交时,它是否有效?如果你在会话中输入一个值,然后点击一个路径来获取该值,它是否存在?正在检查会话重新生成问题。当我提交(通过Ajax)时,我得到TokenMissatchException。我尝试将路由包装到
Route::group(['middleware'=>['web']],function(){…}
但是没有用。同样,它不应该在刷新时重新生成csrf令牌,不管它是提交的还是刷新的,对吗?lagbox-是的,我在另一个线程上看到了这个建议-我的返回空值。这个问题似乎与_令牌值没有保存在Session/Store.php属性中有关,而它在本地保存。这意味着每个请求都会创建一个新会话,正如下面的答案所提到的,它可能是一个cookie问题。当您提交时,它能工作吗?如果您在会话中输入一个值,然后点击一个路径来获取该值,它是否存在?检查会话重新生成问题。当我提交时(通过Ajax)我得到了TokenMismatchException。我尝试将路由包装到
Route::group(['middleware'=>['web']],function(){…}
但是没有用。同样,它不应该在刷新时重新生成csrf令牌,不管它是提交的还是刷新的,对吗?lagbox-是的,我在另一个线程上看到了这个建议-我的返回空值。这个问题似乎与_令牌值没有保存在Session/Store.php属性中有关,而它在本地保存。这意味着每个请求都会创建一个新会话,正如下面的答案所提到的,这可能是一个cookie问题。我试过了。它不起作用。我想我必须在VerifyCsrfToken类中禁用URI的CSRF保护。如果我找到一个合适的解决方案,我会将它发布到这里。我试过了。它不起作用。我想我必须禁用CSRF保护关于VerifyCsrfToken类中的URI。如果我找到合适的解决方案,我将在这里发布。