2015-12-21 120 views
1

我從服務器隨機發送一個500錯誤(不是全部!)發佈請求。出錯後,我必須登錄。Laravel VerifyCsrfToken.php第53行隨機發帖

我實現了使用元素和資源(如Web字體)創建html頁面的PDF2HtmlEX。 要改變我發表的帖子頁面,並獲得數據,但一些頁面(並不總是相同)阿賈克斯後返回500和裏面的數據(和日誌)後,我看到的錯誤:

[2015-12-21 22:17:48] local.ERROR: exception 'Illuminate\Session\TokenMismatchException' in /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:53 
Stack trace: 
#0 [internal function]: Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure)) 
#1 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(124): call_user_func_array(Array, Array) 
#2 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
#3 [internal function]: Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure)) 
#4 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(124): call_user_func_array(Array, Array) 
#5 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(62): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
#6 [internal function]: Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure)) 
#7 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(124): call_user_func_array(Array, Array) 
#8 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
#9 [internal function]: Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure)) 
#10 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(124): call_user_func_array(Array, Array) 
#11 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(59): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
#12 [internal function]: Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure)) 
#13 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(124): call_user_func_array(Array, Array) 
#14 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(44): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
#15 [internal function]: Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure)) 
#16 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(124): call_user_func_array(Array, Array) 
#17 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
#18 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) 
#19 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(122): Illuminate\Pipeline\Pipeline->then(Object(Closure)) 
#20 /path/to/laravel-project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(87): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request)) 
#21 /path/to/laravel-project/public/index.php(54): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request)) 
#22 {main} 

像explaned在文檔中,我在app.blade.php主視圖模板添加...

<meta name="csrf-token" content="{{ csrf_token() }}"> 

。 而在JS腳本開始我補充一下:

$.ajaxSetup({ 
    headers: { 
     'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
    } 
    }); 

我GOOGLE了很多,搜索裏面計算器,但我不能看着辦吧! 問題在於錯誤發生在事件發生時,並非總是如此:似乎存在檢查令牌被認爲有效的限制。 我使用ajax,所以具有標記的元標記在帖子間永遠不會改變。

我正在使用laravel 5.1(5.0升級)。


編輯1: 我試圖增加內部項目/配置/ session.php文件'lifetime' => 120,值:如果該值低(試過10)我可以在第二或第三後得到這個錯誤( 10-20秒後),如果值是hight(嘗試9999),我會在第30次以後發出這個錯誤(4-5分鐘後)。


編輯2: 我添加一些日誌控制器和中間件內。 我可以看到所有的獲取請求返回正確的值,發佈錯誤,其他獲取文件開始之後,在帖子的ajax標題內具有相同的標記。

我不能看到控制器的方法的服務於POST請求日誌: routes.php文件:

Route::post('/page', "[email protected]"); 

RController.php:

public function rPageData(){ 
    Log::info("I am there!"); # always showed except when error occurred. 
    # ... other code ... 
} 

EDIT 3 : 更多信息:我從RController :: rPageData()中的正確文章中拋出$ request,並從Excep處理程序。 我發現前兩行userResolver和routeResolver在錯誤發佈中爲空,並且在正確的發佈中完成。看起來像用戶沒有通過身份驗證,但下一個GET請求,如我的編輯2中報告,正確。

錯誤後:

Request {#40 ▼ 
    #json: null 
    #userResolver: null 
    #routeResolver: null 
... 

好貼:

Request {#40 ▼ 
    #json: null 
    #userResolver: Closure {#144 ▶} 
    #routeResolver: Closure {#154 ▶} 
... 

Request > cookies > headers > parameters > XSRF-TOKEN裏面我有2個職位同理。

Request > session > attributes > _token裏面,我在2個帖子中有2個不同的標記。


編輯4:

好吧,如果你把session_start();routes.php文件的頂部,之後<?php標籤,它會工作。

注意:這不是解決方案。 GrahamCampbell(第二大Laravel貢獻者)說:

NEVER do that! Because that's totally incorrect.

連接reference

你有什麼建議?

預先感謝您!

回答

0

默認情況下,會話在Laravel中持續2個小時。當他們開始失敗時,你是否在2小時內刷新了頁面?

您可以增加會議時間的長度將是有效期爲config/session.php

'lifetime' => 120 //120 minutes is 2 hours 
+0

你好,我已經試過:但似乎奔秒:如果我設置9999它需要很長的時間(約5分鐘)以獲得錯誤信息。如果我設置10,則會在第二個帖子中返回錯誤。爲什麼不考慮分鐘? – Tenaciousd93

相關問題