当要求将来自 facebook sdk 的登录 urlstate
保存在会话中以防止 CSRF 时,这是在Facebook
类setPersistentData($key, $value)
方法中完成的:
$session_var_name = $this->constructSessionVariableName($key);
$_SESSION[$session_var_name] = $value;
在那之后,我做了一个var_dump
并$_SESSION
确保exit;
它在那里并且没有任何东西可以改变$_SESSION
数组。瞧,它就在那里:
...
'fb_451994004840680_state' => string '6de843508d52d3d4926275ab49280cef' (length=32)
...
所以我将index.php
文件更改为
session_start();
var_dump($_SESSION);
exit;
并刷新。所有先前设置的会话元素都在那里,但不是 facebook state。
所以我尝试了以下方法:我在setPersistentData($key, $value)
方法中添加了另一个(虚拟状态)键:
$_SESSION[$session_var_name] = $value;
$_SESSION['fb_1234567890_state'] = '848a87592acd';
var_dump($_SESSION);
exit;
并且两者都直接在 var_dump 之后设置:
'fb_451994004840680_state' => string '6de843508d52d3d4926275ab49280cef' (length=32)
'fb_1234567890_state' => string '848a87592acd' (length=12)
在 index.php 中刷新和 var 转储后,只存在虚拟键:
'fb_1234567890_state' => string '848a87592acd' (length=12)
这怎么可能???