Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Czy użytkownik ma włączone cookies
Forum PHP.pl > Forum > Przedszkole
Szunaj85
W jaki sposób przy pomocy PHP sprawdzić czy użytkownik ma włączone cookies w swojej przeglądarce?
Chodzi mi tu o prosty warunek.
Jeżeli użytkownik ma włączone cookies wykonaj tą czynność w przeciwnym wypadku wykonaj inną czynność.
Szunaj85
A mógłbyś być bardziej precyzyjny i wrzucić odpowiedni kod na forum bo próbuje ale coś nie kula. sadsmiley02.gif
simple programmer
To jest ten kod z forum:
Kod
<?PHP
setcookie("cookies","yes",time() +"3600");
$js = 0;
$cookies = 0;
if (isset($_GET["js"])) {
$js = 1;
}
if (isset($_COOKIE["cookies"])) {
$cookies = 1;
}
if ($cookies == 0 || $js == 0) { #in english: if $cookies equals zero or $js equals 0
header("Location:http://www.livejournal.com");
}
else { #if js and cookies are enabled
header("Location:http://www.yahoo.fr");

}
?>
<html>
<head>
<script type="text/javascript">
if (!window.location.search.substr(1)) {
window.location.href = "test.php?js=yes"; //set test.php to the name of this page...
}
</script>
</head>
<body>
</body>
</html>
-Jarek-
Ten kod nie wykrywa czy ktoś ma włączone cookies czy nie.
Pilsener
Sprawa jest banalna:
http://pl2.php.net/manual/pl/function.setcookie.php
Cytat
Zwracane wartości
If output exists prior to calling this function, setcookie() will fail and return FALSE. If setcookie() successfully runs, it will return TRUE. This does not indicate whether the user accepted the cookie.
- prawie każda funkcja, poza tym że coś robi, zwraca TRUE albo FALSE - nic prostszego, jak to wykorzystać:

  1. <?php
  2. $value = 'string';
  3. $godzina = time()+3600;
  4. if(setcookie("TestCookie", $value, $godzina)){
  5.   echo 'ciacho dobre';
  6.   }else{
  7.   echo 'ciacho niedobre';
  8. }
  9. ?>
Szunaj85
Ciekawe podejście do sprawy Pilsener, ale czy w ogóle sprawdzałeś czy to działa?
Testowałem twój skrypt oraz inny, który znalazłem w internecie, ale podobny do twojego.
Jednak bez względu na to czy miałem włączone cookies w swojej przeglądarce czy nie (pisząc twoim językiem) wyświetlał "ciacho niedobre". Identycznie było przy tym drugim skrypcie.
Nie wiem czy to przypadek czy wskazówka, ale w obu skryptach wyświetlany był ten tekst, który był po "else".
  1. <?php
  2. //skrypt
  3. //warunek if
  4. {
  5. echo 'ciacho dobre';
  6. }else{
  7. //wyświetla tekst znajdujący się poniżej
  8. echo 'ciacho niedobre';
  9. }
  10. ?>

mike
Cytat(Pilsener @ 11.09.2008, 23:16:57 ) *
Nie ma to jak rzucać linkiem do manuala nie wiedząc co jest w środku, co? tongue.gif
Cytat
Cookies will not become visible until the next loading of a page that the cookie should be visible for. To test if a cookie was successfully set, check for the cookie on a next loading page before the cookie expires. Expire time is set via the expire parameter. A nice way to debug the existence of cookies is by simply calling print_r($_COOKIE);.
sowiq
@Szunaj85,
PHP działa na serwerze, więc nie ma bezpośrednio możliwości 'zajrzeć' w ustawienia przeglądarki.

Jedyne wyjście to spróbować ustawić ciacho, przeładować stronę i sprawdzić czy ciastko jest widoczne. Możesz też posiłkować się JS, ale i tak wszystko sprowadza się do dwukrotnego wysłania zapytania do serwera.

[edit]
Pisane na szybko i z palca:
  1. <?php
  2. // ciacho.php
  3. if(!isset($_GET['set'])){
  4.    setcookie('test', '1', time() + 3600);
  5.    header("Locatio: ciacho.php?set");
  6. }
  7. else{
  8.    if(isset($_COOKIE['test']))
  9.        echo "OK";
  10.    else
  11.        echo "DUPA";
  12. }
  13. ?>


ps. powinno być Location:, ale forum nie przepuszcza.
Szunaj85
Sowiq, Ogólnie skrypt działa. Trochę się jednak pokomplikowało i chciałbym zapytać jakie polecenie można wykorzystać do takiej sytuacji.
Jeżeli użytkownik ma włączone cookies nie rób nic w przeciwnym wypadku wykonaj czynność.
mike
No przecież potrafisz już sprawdzić czy ciastka są, prawda?
O co więc chodzi? Podstawy logiki są z tego co pamietam w pierwszej klasie liceum (czy tam teraz w gimnazjum, nie wiem).
sowiq
Cytat(Szunaj85 @ 12.09.2008, 15:37:51 ) *
Jeżeli użytkownik ma włączone cookies nie rób nic w przeciwnym wypadku wykonaj czynność.

Może tak?
Kod
// ciacho.php
if(!isset($_GET['set'])){
   setcookie('test', '1', time() + 3600);
   header("Locatio: ciacho.php?set");
}
else{
    if(!isset($_COOKIE['test'])){
        czynnosc();
        echo "Czynność wykonana;)";
    }
}
Szunaj85
Sowiq nie zupełnie o to mi chodziło, myślałem raczej o jakimś poleceniu. dry.gif
  1. <?php
  2. // ciacho.php
  3. if(!isset($_GET['set'])){
  4.    setcookie('test', '1', time() + 3600);
  5.    header("Locatio: ciacho.php?set");
  6. }
  7. else{
  8.    if(isset($_COOKIE['test']))
  9. // tutaj wstawić polecenie, które sprawi, że skrypt nic nie zrobi tylko przejdzie dalej
  10.    else
  11.        echo "DUPA";
  12. }
  13. ?>

I jeszcze jedno. Tak z ciekawości do czego służy lub co daje "?set"? tongue.gif
sowiq
Bez komentarza... blinksmiley.gif
wookieb
Jakie polecenia?? Człowieku... Ipconfig itd?
sowiq
[ironia]
Znalazłem - chyba o to Ci chodziło winksmiley.jpg

  1. <?php
  2. // ciacho.php
  3. if(!isset($_GET['set'])){
  4.    setcookie('test', '1', time() + 3600);
  5.    header("Locatio: ciacho.php?set");
  6. }
  7. else{
  8.    if(isset($_COOKIE['test'])){
  9.        // nie rób nic
  10.    }
  11.    else
  12.        echo "DUPA";
  13. }
  14. ?>

[/ironia]

biggrin.gif
Black-Berry
haha.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.