Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak wykryć czy klient ma akceptuje cookie?
Forum PHP.pl > Forum > PHP
tomrak
Witajcie.
Piszę po raz pierwszy na tym forum.

Szukałem odpowiedzi na pytanie zadane w temacie, lecz nie znalazłem na tym forum. Jeśli temat był już poruszany to przepraszam i proszę o wskazówkę, odnośnik do tego miejsca.

Jeśli nie to pytam:

Jak wykryć czy klient akceptuje cookie?
Po co takie coś?

Przypuśćmy, że moje oprogramowanie prowadzące statystykę odwiedzin strony zapisuje na dysku serwera nr sesji kazdego z uzytkownikow, jednoczesnie zapisuje cookie u klienta, ktore zawiera ten nr sesji.

Jesli klient będzie miał wyłączoną obsługę cookie, przy następnym wejsciu
zostanie mu znów przydzielone nowe cookie - bo oprogamowniae sprawdza czy takowe jest zapisane u niego.

Powoduje to psucie statystyki - gdyż nabija to liczę indywidulanych użytkowników odwiedzających serwis.

Proszę o poradę.

Serdecznie pozdrawiam,
Tomek.
cichy
na wstępie zrób coś takiego.
[php:1:27fc2cd432]<?php
if($_GET['check']=="cookie")
{
if(isset($_COOKIE['nazwa']))
{
//ma włączoną obsługe cookie
}
else
{
//nie ma obsługi cookie
}
}
else
{
setcookie("nazwa","jakaswartosc",time()+10000);
header(Location: http://www.twojastrona.pl/index.php?check=cookie);
}
?>[/php:1:27fc2cd432]

Powinno zadziałać.
Cytat
Przypuśćmy, że moje oprogramowanie prowadzące statystykę odwiedzin strony zapisuje na dysku serwera nr sesji kazdego z uzytkownikow, jednoczesnie zapisuje cookie u klienta, ktore zawiera ten nr sesji.

Co do tego to jeśli chodzi o sesje wbudowane w php to jeśli ciacho nie istnieje sesja jest przekazywana w URLu (chyba że w php.ini jest to wyłaczone)

Pozdrawiam

EDITED: właśnie zdałem sobie sprawe że to nie zabardzo będzie działać.
zaraz coś wykombinuje innego
tomrak
Dzięki za szybką odpowiedź - za raz wypróbuję.

Jeśli chodzi o sesje - zrobiłem swoją obsługę, która działa niezawodnie.
Miałem troszkę problemów z wbodowaną obsługą sesji.

PS.

Przy okazji - choć nie dotyczy to bezpośrednio php, czy należy użytkowników informować [polityka prywatności] o tym, że witryna korzysta z ciasteczek?
Wydaje mi się, że wszystkie te teksty bardziej straszą niż tłumaczą.

Dziękuję i pozdrawiam,

Tomek.
cichy
[php:1:6c8ffb4d58]<?php
$twoja_strona = "http://www.twojastrona.pl";

if($_SERVER['HTTP_REFERER']==$twoja_strona)
{
if(!isset($_COOKIE['nazwa'])
{
//nie ma obsługi ciastek
}
else
{
//ma obsługe ciastek
}
}
else
{
setcookie("nazwa","jakaswartosc",time()+10000);
header(Location: $twoja_strona);
}

?>[/php:1:6c8ffb4d58]
Ten kod powinien być lepszy.
Choć glowy sobie nie dam uciąć (ani niczego innego tongue.gif)

Co do informowania ludności że Twoja strona działa na ciastkach to informuj ich wtedy gdy to ciastko musi zostać postawione.
W przeciwnym razie użytkownikowi wszystko jedno czy są ciastka czy nie ma.
Pozdro
tomrak
A czy po header nie powinno być exit;?
cichy
W tym przypadku gdy przekierowujesz usera na inną strone to raczej nie ma znaczenia.
jeśli chcesz możesz umieścić exit(); po header ale nie jest to wymagane.
Przynajmniej takie jest moje zdanie.
Pozdro
bamboos
Witam!!
Informowanie użytkownika o coastkach według mnie nie ma większego sensu. Jak ktoś Bardzo nie chce ciastek, to używa przeglądarki, która ich nie obsługuje lub wyłącza je. Jednak większości inernautów (według mnie) "wisi" czy jakaś stronka zostawia ciastka czy nie. Podejżewam, że dużo osób nawet nie wie co to jest i jak to się je. Czyli wyrzucanie komunikatów itp. tylko utrudnia pracę, bo nagle coś wyskakuje... Ale umieszczenie informacji, np: w stopce stronki typu:
"Zostawiam po sobie ciasteczka" jest całkiem wskazana. To tak na mój gust.
tomrak
Drugi przyklad wpada w jakas petle smile.gif
Jak podgladam katalog z cookisami to non stop miesza z tym jednym.

smile.gif
Sprawdze pierwszy.
bamboos
Witam!!
Bo w drugim przypadku $_SERVER['HTTP_REFERER'] może mieć wartość:
Kod
http://www.twojastrona.pl/
co już jest różne od:
Kod
http://www.twojastrona.pl
dob
Cytat
A czy po header nie powinno być exit;?

Lepiej dać, na wypadek nie wykonania sie nagłowka (jak nie przeniesie na inną stronę to zatrzyma dalesze działanie skryptu)

to coś
[php:1:d3b45592c0]<?php
header(Location: $twoja_strona);
?>[/php:1:d3b45592c0]
zmień na :
[php:1:d3b45592c0]<?php
header("Location: ".$twoja_strona);
?>[/php:1:d3b45592c0]
$_SERVER['HTTP_REFERER'] :
Cytat
The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted


Najprostszy sposób na sprawdzenie czy klient akceptuje ciastka to :
strona a.php
[php:1:d3b45592c0]<?php
setcookie("ciastko", "wartosc", time()+3600);
header("location: b.php");
?>[/php:1:d3b45592c0]
strona b.php
[php:1:d3b45592c0]<?php
if($_COOKIE['ciastko']==wartosc){
echo "klient akceptuje ciastka";
}else{
echo "klient nie akceptuje ciastek";
}
?>[/php:1:d3b45592c0]


Tu masz jeszcze jeden kod
[php:1:d3b45592c0]<?php

if ($_GET['check']!=cookie){
setcookie("ciastko", "wartosc", time()+180);
header("location: ?check=cookie");
}else{
if($_COOKIE['ciastko']==wartosc){
echo "klient akceptuje ciastka";
}else{
echo "klient nie akceptuje ciastek";
}
}

?>[/php:1:d3b45592c0]
tomrak
Dziękuję bardzo za pomoc.
Skrypt działa.

biggrin.gif

Serdecznie pozdrawiam,
Tomek
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.