【发布时间】:2013-11-15 19:38:22
【问题描述】:
我的会话未设置,我不确定为什么...
public static function generate( $key )
{
$extra = self::$doOriginCheck ? sha1( $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'] ) : '';
$token = base64_encode( time() . $extra . self::randomString( 32 ) );
$_SESSION[ 'csrf_' . $key ] = $token;
return $token;
}
我用它来生成密钥。在我的登录表单中,包含我的会话文件后,我使用:
$token = CSRF::generate("token"); // class name is CSRF
然后我使用它$token 作为隐藏值,它与表单一起提交。
现在来检查一下,我使用了一个叫做 check() 的函数(这是抛出异常的部分:
public static function check( $key, $origin, $throwException=false, $timespan=null, $multiple=false )
{
if ( !isset( $_SESSION[ 'csrf_' . $key ] ) )
if($throwException)
throw new Exception( 'Missing session token.' );
else
return false;
....
我正在检查如下:
CSRF::check($token, $_POST, true, 60*10, false);
($token 是提交的令牌)。 为什么不在会话中保存令牌?
【问题讨论】: