Witam, posiadam problem z tokenem zabezpieczającym przed ponownym przesłaniem formularza. Kwestia jest o tyle dziwna, że skrypt działał, ale.. przestał.

Sesje:

  1. class Session {
  2.  
  3. public function Create($data = array())
  4. {
  5. foreach($data as $name => $value)
  6. {
  7. $_SESSION[$name] = $value;
  8. }
  9. return $_SESSION;
  10. }
  11.  
  12. public function Exist($session_name)
  13. {
  14. return (isset($_SESSION[$session_name]) && $_SESSION[$session_name] !== '') ? true : false;
  15. }
  16.  
  17. public function get($session_name)
  18. {
  19. return (self::Exist($session_name)) ? $_SESSION[$session_name] : false;
  20. }
  21. public function Destroy($session_name)
  22. {
  23. if(self::Exist($session_name))
  24. {
  25. unset($session_name);
  26. }
  27. }
  28. }
  29.  
  30. ?>


Token:

  1. <?php
  2. class Token {
  3. public function Generate()
  4. {
  5. Session::Create(["_USER_TOKEN" => md5(uniqid())]);
  6. return Session::get("_USER_TOKEN");
  7. }
  8.  
  9. public function Check($token_value)
  10. {
  11. if(Session::get("_USER_TOKEN") == $token_value)
  12. {
  13. Session::Destroy("_USER_TOKEN");
  14. return true;
  15. }
  16. return false;
  17. }
  18. }
  19. ?>


Wywołanie tokena w formularzu:
  1. <input type="hidden" name="token" value="<?php echo Token::Generate(); ?>" />


Sprawdzanie go:
  1. if(isset($_POST['submit']))
  2. {
  3. if(Token::Check($_POST['token']))
  4. {
  5. ...
  6. }
  7. else
  8. {
  9. $e = "jakiś tam błąd";
  10. }
  11. }


Generalnie po wejściu na stronę logowania i wywołaniu var_dump, nie pokazuje zarejestrowanej sesji _USER_TOKEN. Dopiero po odświeżeniu bądź po próbnie wysłania formularza. Niestety, nie działa. Wychodzi na to, że token zapisany w sesji jest inny niż ten zapisany w formularzu. Ktoś dostrzegł jakiś błąd? Pozdrawiam i liczę na pomoc.