2015-10-14 107 views
9

我有一個Laravel 5.0站點,前端JS對後端Laravel代碼進行了大量Ajax調用。我注意到,在每次ajax請求時,我都會在響應中每次獲得新的「laravel_session」cookie值。我猜測這是一種安全機制來防止會話劫持。Laravel會話ID隨每個請求而改變

但我認爲這是我的網站造成的一個問題,因爲我的ajax調用經常並行發生,而不是順序發生。在開始下一個電話之前,我不會等待回覆。

考慮這種情況

。 Ajax調用1 - 請求 - laravel_session cookie ='1234'

。 Ajax調用1 - 響應 - laravel_session cookie ='2345'

。 Ajax call 2 - request- laravel_session cookie ='2345'

。 Ajax調用3 - 請求laravel_session cookie ='2345'

。 Ajax調用2 - 響應 - laravel_session cookie ='3456'

。 Ajax調用3 - 響應 - 會話不再有效

有沒有辦法解決這個問題?

我也應該注意到,會話設置在config/session.php文件到期的 '終身'=> 120,

enter image description here

config/session.php

+2

這不是一個安全機制,你是對的 - 它不應該發生。檢查'config/session.php'中的會話設置,並檢查cookie路徑是否有效。默認情況下,基於文件的會話應該存儲在'storage/framework/sessions /'中 - 如果該文件夾爲空,則安裝程序可能無法正確寫入該文件夾。 – samlev

+0

我在config/session.php中的設置看起來對我來說'files'=> storage_path()。'/ framework/sessions', ,我可以看到正在爲storage/framework/sessions/ – MakkyNZ

+0

創建的文件, files'=> storage_path('framework/sessions') – mroesler

回答

2

你的域名是無效的。你需要看看config.session.domainconfig.session.path

+0

我已將config/session.php中的'domain'設置更改爲我網站的域名,但仍然看到問題。 '路徑'設置爲'/'這對我來說似乎很好 – MakkyNZ

+0

你確定域名是正確的嗎?你能發佈另一個截圖嗎?我幾個小時都有同樣的問題,直到我意識到我意外地犯了一個小錯誤。 –

+0

我已添加屏幕截圖。 http://local.mysite.com是在本地運行時網站的網址。我有一個主機條目。 – MakkyNZ

6

你是對的這是一個安全機制。要禁用它進行測試,在Kernel.php註釋掉該行:

\App\Http\Middleware\EncryptCookies::class 

然後你會看到你的cookie瀏覽器會話ID,它不會改變。

您可以使用Google for HTTP加密的Cookie來了解該做法。如果在我們在每個網站上使用HTTPS,這種舊做法是必要的,那麼這個問題仍然存在爭議。

+0

你爲什麼這麼說?這不是真的,你建議有人禁用安全機制。 – hilnius

+0

我對此表示贊同。這個問題歸結爲:「爲什麼會發生這種情況?一件安全的事情?」我相信這會回答它。您可以註釋掉該行來驗證它,但我不會將其作爲刪除加密的建議閱讀。 – mikeDOTexe

+0

謝謝,我編輯了答案,澄清爲測試目的禁用。 – malhal