2015-10-14 112 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