Laravel是否为CSRF令牌设置了Cookie

时间:2018-06-18 07:43:43

标签: laravel laravel-5 cookies laravel-5.3 csrf-protection

我想从laravel使用XSRF-Token键设置的cookie中获取CSRF令牌。 (如here所述)

但我认为这个cookie包含其他内容,因为它的长度比普通的Laravel CSRF令牌大得多。

另外,我认为我的laravel App存在一些问题。因为它会响应发送两个set-cookie标头。

这是laravel在set-cookie响应头中发送的内容。

Set-Cookie: dsss=eyJpdiI6InFQQjdtUDN0TG1NZTNqZjZaY3MwMXc9PSIsInZhbHVlIjoiR2hzaVwvUTJlQ28yTTVqVFJUeG5QcDBINnRcLzB6VEZpXC9MSGRnQktaRHNCY0U4SFwvQ01DZ0hJYVZrcjFMT21jaE5obkpMTUVTM1Eyc0pPRzhTdkJcL2ZYUT09IiwibWFjIjoiZDI5ZGQxMjYyZjZmN2MyMjk5YzFmNmVjNDRhNjkwY2VhNGRjZjBhN2E0NWM1MTFmYjVhMjA2Y2YzYmU3ZjFiMCJ9; expires=Mon, 18-Jun-2018 08:51:39 GMT; Max-Age=7200; path=/; HttpOnly
Set-Cookie: XSRF-TOKEN=eyJpdiI6Im4ra21yZlFGRWZjZ2YrQjE5WVdUMXc9PSIsInZhbHVlIjoiRlQ0ZHFaVk9idEY2K3hEV3hxSExsZjNKZ080cjhiTFEwdGZFK3RaOGgxOSs3dHNLRmRhcThZVFwvZ3J2ZFpxdG1VYjY2UjBobzEraTNZRm1Ha1ZUeGtRPT0iLCJtYWMiOiI5YzAzNWFhMjE0ZjBiYTM4MzE2OTFkNDYyYmZlYTc4NzdjNjc1YmMxODZkYzliZTkzZDI0MjQ3NzY4YjhhMmNlIn0%3D; expires=Mon, 18-Jun-2018 08:51:39 GMT; Max-Age=7200; path=/

另外,我将laravel_session cookie重命名为dsss。

我不能使用元标记来存储cookie,因为我的所有html都被缓存了。但我可以发送新的响应标题。

更新

我已将laravel_session重命名为原始名称,但仍会发送两个set-cookie标头。

Set-Cookie: XSRF-TOKEN=eyJpdiI6IlhRRUt3SDIrUXc0UGpSRVB0b1ZBUEE9PSIsInZhbHVlIjoiMWtsckVTZ2JRWlNXaXBkWG96WFhsMG00bVFBOHMxSUFaTGEwMlZtMkZPYmdZdks4bWpKTjdURktBanhBNjhsQUZTb1BFaVNacEkySDFOQTRCTUw1RUE9PSIsIm1hYyI6IjlkNTVjODdkMTQwYTQ3ZTkxOTNjYjljZDc3NTU3MjE5MTg2OTM5ODhjOTg0YjE0ODYyZjBhNzc1YTkzOWIxZDAifQ%3D%3D; expires=Mon, 18-Jun-2018 10:37:42 GMT; Max-Age=7200; path=/
Set-Cookie: laravel_session=eyJpdiI6ImNxOTdCNkIydmFHbmlYRFVnYUdlb2c9PSIsInZhbHVlIjoiOUFWWmc5QkFGV1RrWUp6TzlNTUFaWFhhaFUyd0tyYTlFeE9XZWhRUzZ1ZnNHZTJDK3paRmtWdkNOQ1FERmVJKzNxVjZRMGRHemRjSXZMWU1sK1R6T0E9PSIsIm1hYyI6IjYyYjBlNTgwNDY0NzYxNjVlOWQ0MWE2NDFiYWU2NjI1NWUwYjY2MTAyNmYyNmZhOGU2ZGE1NDg3ZGQ1YjljMmEifQ%3D%3D; expires=Mon, 18-Jun-2018 10:37:42 GMT; Max-Age=7200; path=/; HttpOnly

2 个答案:

答案 0 :(得分:1)

实际上,csrf令牌会自动存储在cookie中。如果你想要检索它,请使用这个php函数

  

echo $ _COOKIE ['XSRF-TOKEN'];

答案 1 :(得分:1)

根据文档:

  

发送此cookie主要是为了方便,因为某些JavaScript框架和库(例如Angular和Axios)会自动将其值放在X-XSRF-TOKEN标头中。

https://laravel.com/docs/5.8/csrf#csrf-x-xsrf-token