Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dziwne zachowanie klasy Cookie - brak dostepu do zmiennej
Forum PHP.pl > Forum > PHP
sin.dnm
Witam,

Napisałem sobie klasę Cookie

  1. class Cookie
  2. {
  3.  
  4. function set($NAME, $VALUE, $EXP_DATE = null, $DOMAIN = null, $PATH = null, $SECURE = 0)
  5. {
  6. if (setcookie($NAME, $VALUE, $EXP_DATE, $PATH, $DOMAIN, $SECURE))
  7. return $VALUE;
  8. }
  9.  
  10. function get($NAME, $INDEX = null)
  11. {
  12. $VAR = false;
  13.  
  14. if ($INDEX != null)
  15. $VAR = $_COOKIE[$NAME][$INDEX];
  16. else
  17. $VAR = $_COOKIE[$NAME];
  18.  
  19. return $VAR;
  20. }
  21.  
  22. function DataWaznosci($N)
  23. {
  24. $TIME = time() + ($N * 24 * 3600);
  25. return $TIME;
  26. }
  27.  
  28. function Cookie()
  29. {
  30. return true;
  31. }
  32. }


i teraz jest taka dziwna sytuacja, że jak wywołam index.php

  1. if (!Cookie::get('Nazwa'))
  2. Cookie::set('Nazwa',1234);
  3.  
  4. echo 'CIACHO: '.Cookie::get('Nazwa');


to wyświetla "CIACHO: " i tyle sad.gif

zmodyfikowałem funkcję set do postaci:

  1. function set($NAME, $VALUE, $EXP_DATE = null, $DOMAIN = null, $PATH = null, $SECURE = 0)
  2. {
  3. if (setcookie($NAME, $VALUE, $EXP_DATE, $PATH, $DOMAIN, $SECURE))
  4. {
  5. echo 'WARTOŚĆ COOKIE: '.$VALUE;
  6. return $VALUE;
  7. }
  8. }


I wtedy wyświetla mi poprawną wartość, czyli "WARTOŚĆ COOKIE: 1234 CIACHO: " czyli znowu nie otrzymuję wartości z funkcji get.

Sprawdzałem w WebDeveloperTools dla FF i ciastko jest utworzone.

Jak ponownie wywołam index.php to wtedy dopiero otrzymuję "CIACHO: 1234"

Macie może jakieś pomysły czemu nie mam dostępu do zmiennej $_COOKIE['Nazwa'] od razu po utworzeniu jej.

Próbowałem nawet zamienić klasę na zwykłe setcookie('Nazwa','1234) i echo $_COOKIE['Nazwa'] i efekt jest taki sam....
nospor
setcookie ustawia $_COOKIE dopiero na następne wywołanie strony
sin.dnm
Dzięki za odpowiedź.
Czy istnieje jest jakaś możliwość ustawienia cookie żeby od razu można było zacząć z niego korzystać?
nospor
No to ustaw recznie zaraz po setcookie

setcookie(......);
$_COOKIE['bo mi się spieszy'] = 'bo jestem niecierpliwy tongue.gif';
sin.dnm
jeszcze teraz mi wpadło do głowy, żeby dać
  1. if (!Cookie::get('Nazwa'):
  2. $WARTOSC = Cookie::set('Nazwa',1234);
  3. else
  4. $WARTOSC = Cookie::get('Nazwa');
  5. echo $WARTOSC;


Czy raczej nie jest to wskazane?
nospor
A rób jak chcesz. Skoro Cookie:set zwraca ci ustawianą wartosc to korzystaj z tego. Wszystko zależy od Twoich potrzeb

edit: zmieniasz posty w trakcie czyjejs odpowiedzi. Odpowiadałem ci na post o zupelnie innej tresci!
sin.dnm
Spoko, dzięki.

Chodzi mi tylko o to czy taki sposób przekazania zmiennej jest bezpieczny.
nospor
Funkcja zwraca ci dokładnie to co jest podajesz. Jak dasz jej dynamit to zwroci ci dynamit, jak dasz jej ciastko to zwroci ci ciastko.

edit: zmieniasz posty w trakcie czyjejs odpowiedzi. Odpowiadałem ci na post o zupelnie innej tresci!

if (!Cookie::get('Nazwa'):
$WARTOSC = Cookie::set('Nazwa',1234);
else
$WARTOSC = Cookie::get('Nazwa');
echo $WARTOSC;

Ten kod pobiera ci wartosc z ciacha. Wszystko zalezy od tego co ty tam chcesz przechowywać i co z tym robić. Musisz pamiętać, że ciacho user sam sobie może zmienić niezależnie od tego co ty tam włożysz.
sin.dnm
Ogólnie mam zamiar trzymać tam zhashowane IDKoszyka sklepowego.
W połączeniu ze zmienną z sesji (UserID) będę mógł wyciągnąć z bazy to co ktoś nawrzucał do koszyka.

Czy może lepiej IDKoszyka też trzymać w sesji, chociaż zależy mi na tym, aby koszyk był zapamiętany przez 2 - 3 dni jakby user wrócił.


nospor
Jeśli koszyk chcesz pamiętać na dłużej to to rozwiązanie jest ok.
Pamiętaj tylko by to była na tyle unikalna wartosc, by nie można było jej łatwo podrobić i wstrzelić się w cudzy koszyk
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.