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

  • Автор темы Автор темы saaj
  • Дата начала Дата начала

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
может кому нибудь известна причина таких странностей?
 
а не слишком ли сложный способ "защиты обработки по refresh"?
 
присваивание - последние две строчки... в smarty 'token' поле формы поторая POST'ится...

а по поводу сложности... ну token ножно и проще сдлеать, что от этого изменится или ты про что-то принцепиально иное ;)
 
redirect - некрасиво... ну по крайней мере для моего контекста
 
это тебе так только кажется.
как ты понимаешь редирект, и почему считаешь, что некрасиво?
 
дискуссия это конечно, хорошо... во только по теме бы...
...а по поводу redirect'а... ну на себя после submit'а... ну можно, хотя вроде как дополнительная работа... ну и если php не модулем apache стоит... то это meta'ой или js, что уж точно не красиво...
так и все таки, встречалась кому-нить такая ситуация?
 
недавно, была мысль о 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>
те если не делаю я, то делает кто-то другой ;)...
 
Сверху