Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dziwne zachowanie klasy Cookie - brak dostepu do zmiennej
sin.dnm
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/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....
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




setcookie ustawia $_COOKIE dopiero na następne wywołanie strony
Go to the top of the page
+Quote Post
sin.dnm
post
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


Dzięki za odpowiedź.
Czy istnieje jest jakaś możliwość ustawienia cookie żeby od razu można było zacząć z niego korzystać?
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No to ustaw recznie zaraz po setcookie

setcookie(......);
$_COOKIE['bo mi się spieszy'] = 'bo jestem niecierpliwy (IMG:style_emoticons/default/tongue.gif) ';
Go to the top of the page
+Quote Post
sin.dnm
post
Post #5





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


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?

Ten post edytował sin.dnm 10.06.2011, 09:31:50
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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!
Powód edycji: [nospor]:
Go to the top of the page
+Quote Post
sin.dnm
post
Post #7





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


Spoko, dzięki.

Chodzi mi tylko o to czy taki sposób przekazania zmiennej jest bezpieczny.
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.
Go to the top of the page
+Quote Post
sin.dnm
post
Post #9





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


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ł.


Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 06:43