Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Ciastko się nie wyświetla
Forum PHP.pl > Forum > Przedszkole
merick
Mam następujący skrypt:

  1. <? 
  2. setcookie("ciacho",TRUE); 
  3. $ciastko = $_COOKIE['ciacho']; 
  4. if($ciastko==TRUE) 
  5. echo "Byłeś już na tej stronie !!!"; 
  6. else 
  7. echo "Jeszcze cię tu nie było !!!"; 
  8. ?
  9. ?>


Według skryptu zostaje wysłane ciacho, a przy pierwszym załadowaniu strony powinno się pojawić "Jeszcze cię tu nie było exclamation.gif!", a przy każdym kolejnym załadowaniu stony "Byłeś już na tej stronie exclamation.gif!". Problem w tym, że u mnie caly czas pojawia się "Jeszcze cię tu nie było exclamation.gif!". Hmm. Nie wiem co jest źle z tym skrptem, ale jeśli ktoś ma jakiś pomysł to proszę o wskazówki. Zastanawiam się czy wogóle to ciach jest wysyłane. Mam włączoną w przeglądarce obsługę ciastek. A może serwer wymaga jakieś konfiguracji (Krasnal 2.7).
Jak widzicie jestem początkujący, a problem jest banalny.
Liczę na wskazówki i z góry dziękuję smile.gif
LBO
1.wstaw BBcode
2.działa!
merick
Jak wspomniałem wcześnije jestem początkujący. Nie wiem o co biega z BB codem. Możesz podać skrypt jak to ma wyglądać.
Z góry dziękuję biggrin.gif
mike
1. Wyrzucam do Przedszkola
2. Bycie początkującym nie zwalnia ze znajomości Regulaminu. Popraw bbCode w pierszym poście!
3. Przeczytaj to: setcookie() a bedziesz wiedział jak poprawnie wysyłać ciastko. Są tam przykłady, które powiedzą i wszystko.
merick
Oki, wracając do pierwszego postu. Kod który jest tam zawaryt pochodzi z kursu ze strony: kurs

Oto urywek który mnie fascynuje najbardziej

Cytat
Przykładowy skrypt z wykorzystaniem ciasteczek:


<?
setcookie("ciacho",TRUE);
$ciastko = $_COOKIE['ciacho'];
if($ciastko==TRUE)
echo "Byłeś już na tej stronie exclamation.gif!";
else
echo "Jeszcze cię tu nie było exclamation.gif!";
?> 

Powyższy skrypt wysyła ciastko do użytkownika z wartością logiczną TRUE, po czym sprawdza, czy ciastko to posiada taką wartość.
Przy pierwszej wizycie na stronie wyświetlony zostanie napis: Jeszcze cię tu nie było exclamation.gif!, mimo, iż wcześniej zostało wysłane to ciastko.
Oznacza to, że ciastko jest widoczne dopiero po ponownym przeładowaniu strony.
Następna wizyta użytkownika spowoduje wyświetlenie napisu: Byłeś już na tej stronie exclamation.gif!.


Ponieważ jest to wyrywek z kursu nie może tam być błędów. Problem polega na tym, że u mnie to nie działa. Możesz mi to wyjaśnić dlaczego? biggrin.gif
mike
Żeby to ciastko było ważne po przeładowaniu strony, trzeba nadać mu jakś czas ważności.
Jak to zrobić? Masz to w linku podanym przeze mnie.

P.S.
"Ponieważ jest to wyrywek z kursu nie może tam być błędów." - skąd ten wniosek? Błędny zresztą. W wywołaniu setcookie() brak trzeciego parametru, który pomimo tego że jest opcjonalny, to jest zarazem kluczowy.
merick
Dla potrzeb testowana mój kod wygląda teraz tak:

  1. <?php
  2.  
  3.  
  4. setcookie("ciacho",TRUE,time()+30); 
  5. $ciastko = $_COOKIE['ciacho']; 
  6. if($ciastko==TRUE) 
  7. echo "Byłeś już na tej stronie !!!"; 
  8. else 
  9. echo "Jeszcze cię tu nie było !!!"; 
  10.  
  11.  
  12. ?>


A po kolejnych przeładowaniach strony pojawia się wciąż:

Cytat
Jeszcze cię tu nie było exclamation.gif!


Dlaczego?
kszychu
Czy testujesz to na lokalnej maszynie czy na jakimś serwerze? Jeżeli na serwerze to sprawdź datę na serwerze.
mike
Nie ma co się dziwić, za każdym razem ustawiasz ciacho, które bedzie ważne następnym razem. A potem znów je ustawiesz i znów będzie ważne następnym razem, ....

Wywal ten kurs, wode z mózgu Ci zrobi.
Powinieneś ustawić ciacho tylko wtedy kiedy go nie ma:
  1. <?php
  2.  
  3. $blnVisited = ( empty( $_COOKIE[ 'visited' ] ) ) ? false : $_COOKIE[ 'visited' ];
  4.  
  5. if( $blnVisited )
  6. {
  7. echo 'witaj ponownie';
  8. }
  9. else
  10. {
  11. echo 'witaj pierwszy raz';
  12. setcookie( 'visited', true, time() + 3600 ); // na godzinę
  13. }
  14.  
  15. ?>
merick
Testuję to na na swoim kompie. Mam tu Krasnala 2.7, data chyba jest pobierana z systemu w takiej sytuacji.

Ten skrypt który mi podesłaliście wywala bład. Wygląda to tak:

Cytat
witaj pierwszy raz
Warning: Cannot modify header information - headers already sent by (output started at c:\usr\krasnal\www\session\session11\session.php:11) in c:\usr\krasnal\www\session\session11\session.php on line 12


Próbowałem też usuwać ciacho i od nowa wszystko i taki sam błąd wywala.

Idąc dalej zgodnie z sugestją z poprzedniego posta zmieniłem swój kod do takiej postacji:

  1. <?php
  2.  
  3. $ciastko = $_COOKIE['ciacho']; 
  4.  
  5. if($ciastko==TRUE) {
  6.  
  7. echo "Byłeś już na tej stronie !!!"; 
  8.  
  9. }
  10.  
  11. else {
  12.  
  13. setcookie("ciacho",TRUE,time()+3600); 
  14.  
  15. echo "Jeszcze cię tu nie było !!!";
  16.  
  17. }
  18.  
  19. ?>


A wynik działania wcale się nie zmienił. Wciąż wywala, że:

Cytat
Jeszcze cię tu nie było exclamation.gif!


Zgodnie z tym dochodzę do wniosku, że kod jest oki, ale ciacho nie powstaje. Mimo ustawienia przeglądarki na akceptowanie ciastek coś może powodować że nie mogą zostać utworzone. Nie wiem czy w dobrym kierunku idę. Może ma ktoś jakiś pomysł? Będę wdziękczy za każdą sugestię i pomoc. biggrin.gif

P.S. Niby przedszkolny problem, a rozwiązania wciąż brak.
mike
Oba skrypty działają. I ten który podałes wyżej i mój.

Twoim problmem jest to że to nie jest całość Twojego skryptu. Gdzieś wcześniej prawdopodobnie wysyłasz już nagłówki a nie możesz tego robić.
merick
Temat zakończony. Wszystkiemu był winny firewall. Wystarczyło go wyłączyć i już wszystko działa jak należy. biggrin.gif
Dzięki za dyskusję biggrin.gif
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.