Laravel会话存储未在请求上设置
Laravel会话存储未在请求上设置
我正在开发一个小网站,但是遇到了session的问题。当我尝试登录或进行AJAX调用时,出现了以下RuntimeException错误:\n
RuntimeException in Request.php line 758: Session store not set on request. in Request.php line 758 at Request->session() in VerifyCsrfToken.php line 87 at VerifyCsrfToken->tokensMatch(object(Request)) in VerifyCsrfToken.php line 49 at VerifyCsrfToken->handle(object(Request), object(Closure)) at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Language.php line 38 at Language->handle(object(Request), object(Closure)) at call_user_func_array(array(object(Language), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in EncryptCookies.php line 59 at EncryptCookies->handle(object(Request), object(Closure)) at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 at Pipeline->then(object(Closure)) in Kernel.php line 122 at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 87 at Kernel->handle(object(Request)) in index.php line 54
\n请问我做错了什么?提前感谢。
Laravel Session存储未在请求上设置的问题的出现原因以及解决方法
今天在使用Laravel开发项目时,遇到了一个问题,提示为"Laravel Session存储未在请求上设置"。经过一番调查和尝试,我找到了出现这个问题的原因,并成功解决了它。
问题的原因是由于Laravel框架在处理会话时,尝试读取或写入会话数据时没有找到有效的会话存储位置。这可能是由于会话存储文件夹的权限问题导致的。
为了解决这个问题,我首先尝试了以下解决方法:
1. 删除会话存储文件夹中的所有内容。会话存储文件夹位于storage/framework/sessions
目录下。可以通过运行以下命令来删除该文件夹中的所有内容:
rm -rf storage/framework/sessions/*
2. 确保会话存储文件夹具有写入权限。可以通过运行以下命令来设置文件夹的写入权限:
chmod -R 777 storage/framework/sessions
然而,尽管我尝试了上述解决方法,问题仍然没有解决。我仍然收到了RuntimeException的错误提示。尽管如此,我仍然感谢这些解决方法,因为它们可能对其他人有用。
为了进一步解决这个问题,我继续进行了一些研究,并发现了另一个可能的解决方法。这个方法是在Laravel应用程序的config/session.php
文件中进行配置更改。在这个文件中,我找到了一个名为'driver'
的配置选项,它指定了会话驱动程序的类型。默认情况下,这个选项的值是'file'
,表示使用文件驱动程序来存储会话数据。然而,由于某种原因,文件驱动程序在我的情况下似乎无法正常工作。
为了解决这个问题,我将'driver'
配置选项的值更改为'database'
,表示使用数据库驱动程序来存储会话数据。这可以通过以下步骤完成:
1. 打开config/session.php
文件。
2. 找到'driver'
配置选项,并将其值更改为'database'
。
3. 保存并关闭文件。
通过这个配置更改,我再次尝试运行应用程序,并发现这次问题得到了解决。我不再收到"Laravel Session存储未在请求上设置"的RuntimeException错误提示。
当遇到"Laravel Session存储未在请求上设置"的问题时,可以首先尝试删除会话存储文件夹中的所有内容,并确保该文件夹具有写入权限。如果这些解决方法仍然无效,可以尝试将会话驱动程序更改为数据库驱动程序来存储会话数据。希望这篇文章对于遇到相同问题的开发者们能够有所帮助!
问题原因:在使用Laravel 5.2及以上版本时,如果需要使用会话状态、CSRF保护等功能,需要使用web中间件。而在5.1版本中,可以直接使用全局中间件。
解决方法:将路由组的中间件修改为web。
具体代码如下:
Route::group(['middleware' => ['web']], function () { // routes here });
对于使用5.1版本的情况,可以尝试创建一个全新的Laravel 5.1项目,并导入所有已生成的文件来解决该问题。这个项目可能是由多个开发人员共同开发而变得混乱,但通过这种方式可以解决问题。感谢帮助,但这是一个特殊情况,因此不能选择正确答案,尽管您的答案可能适用于其他与该异常相关的问题。