2013-11-15 5 views
1

Моя сессия не установлена, и я не знаю, почему ...CSRF Session лексема не работает

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 как скрытое значение, которое представляется вместе с формой.

Теперь, чтобы проверить это, я использую функцию под названием чек() (это та часть, где брошено исключение:

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 - токен, отправленный) Почему не сохраняется токен в сеансе?

ответ

0

Вы передаете $ токен в качестве первого параметра для CSRF :: check (). Конечно, это должно быть:

CSRF::check('token', $_POST, true, 60*10, false); 

вместо

CSRF::check($token, $_POST, true, 60*10, false); 

Видя, как вы устанавливаете ключ в качестве 'маркера' в CSRF :: генерировать? В противном случае:

if (!isset($_SESSION[ 'csrf_' . $key ])) 

будет что-то вроде:

if (!isset($_SESSION[ 'csrf_hed97988hdbnbnuihg07dede89723tg7yihoi3dh' ])) 
+0

BONEHEAD ошибка !!!! Огромное спасибо!!! : D –

+0

@ user2738336 Не беспокойтесь. У меня было несколько современных мозгов! –

Смежные вопросы