Искажение переменной в сесси в ie&ff. в opera'е нормально

saaj

Новичок
Искажение переменной в сесси в ie&ff. в opera'е нормально

В общем есть код - защита от обработки по refresh
PHP:
      $validToken = (empty($_POST['token']) || ($_SESSION['token'] != $_POST['token'])) ? false : true;      
      $ctoken = md5(uniqid(rand())); 
      $smarty->assign('token', $ctoken);
      $_SESSION['token'] = $ctoken;
получается что в ie&ff $validToken всегда false... посмотрел значения - в сессии приходит сосем не то что присваивал... ну или частично не то (в случает если $ctoken = uniqid(); то искажается конец $ctoken), причем если присваиваю $ctoken константу ("dfsdfd") то не искажается... в opera'е все отлично работеат... в общем довольно странно, принимая во внимание то, что у хостера во всех этих браузерах все нормально работает....
у меня php: 5.02; apache: 2.0.47; os: nt 5.1; используется pear::auth
может кому нибудь известна причина таких странностей?
 

HraKK

Мудак
Команда форума
Покажи код где присваиваешь значение
 

Фанат

oncle terrible
Команда форума
а не слишком ли сложный способ "защиты обработки по refresh"?
 

saaj

Новичок
присваивание - последние две строчки... в smarty 'token' поле формы поторая POST'ится...

а по поводу сложности... ну token ножно и проще сдлеать, что от этого изменится или ты про что-то принцепиально иное ;)
 

saaj

Новичок
redirect - некрасиво... ну по крайней мере для моего контекста
 

Фанат

oncle terrible
Команда форума
это тебе так только кажется.
как ты понимаешь редирект, и почему считаешь, что некрасиво?
 

saaj

Новичок
дискуссия это конечно, хорошо... во только по теме бы...
...а по поводу redirect'а... ну на себя после submit'а... ну можно, хотя вроде как дополнительная работа... ну и если php не модулем apache стоит... то это meta'ой или js, что уж точно не красиво...
так и все таки, встречалась кому-нить такая ситуация?
 

SiMM

Новичок
> ну и если php не модулем apache стоит...
Какая разница?
 

saaj

Новичок
недавно, была мысль о register_globals и том, что я его когда-то в On ставил... вернул в Off... в ff заработало, в ie все по прежнему... просто science fiction ;)... почему тогда в opera'е работало, если были перекрытия переменных из-из register_global... те я ничего не дела, под конкретный браузер...но вот такое работает везеде...
PHP:
<html>
<body>
<?php
  require_once('Auth.php');  
  $Auth = new Auth("Array");
  $Auth->setAuth("some_user");
  if ($Auth->getAuth()) {
    if (isset($_POST['token']))
      echo "from post: ".$_POST['token']."<br>";
    if (isset($_SESSION['token']))
      echo "from sess: ".$_SESSION['token']."<br>";
    $validToken = (empty($_POST['token']) || ($_SESSION['token'] != $_POST['token'])) ? false : true;
    $ctoken = md5(uniqid(rand()));
    $_SESSION['token'] = $ctoken;
    if ($validToken) 
      echo "<b>ok</b>";
    else
      echo "<b style='color: red'>isnt ok</b>";
  }
?>
<form method="post" action="<?=$_SERVER["PHP_SELF"]?>">
  <input type="text" name="token" value="<?=$ctoken?>" size="40">
  <input type="submit" value="go">
</form>
</body>
</html>
те если не делаю я, то делает кто-то другой ;)...
 
Сверху