Как да проверите кои потребители приемат бисквитки?

Искам да проверя кои потребители приемат бисквитки, за да мога да получа груб % от потребителите, които приемат бисквитки на един от нашите PHP сайтове.

Идеята ми е да създам временна колона acceptsCookies в таблицата Users, за да ви помогне да следите това (например, ако потребител приеме бисквитки, тогава неговият acceptsCookies ще бъде зададен на "Y", в противен случай ще бъде зададен на "N").

Как мога да направя това на единствена страница (задаване на тестова бисквитка, проверка дали е приета/настроена, актуализиране на БД)?

Актуализация: За да бъде ясно, това трябва да се направи 100% в PHP.


person ProgrammerGirl    schedule 14.11.2011    source източник
comment
Не звучи много трудно, JavaScript също може да задава и чете бисквитки. Опитайте се да го направите сами и ако се затрудните, елате тук за помощ с по-специфичен проблем. Това е сайт за въпроси/отговори, а не сайт за изграждане на моя код за мен.   -  person Madara's Ghost    schedule 14.11.2011
comment
@Truth: Не мога да използвам Javascript, затова посочих PHP и не маркирах Javascript.   -  person ProgrammerGirl    schedule 14.11.2011
comment
След това трябва да посочите във въпроса си, че не можете да използвате JavaScript.   -  person Madara's Ghost    schedule 14.11.2011
comment
@Truth: Моля, спрете да отговаряте, общото ви отношение и отрицателното гласуване изобщо не са полезни. Изглежда, че вие ​​сте единственият, който не е разбрал въпроса, тъй като вече имам два полезни отговора, единият от които е много умно решение на това, което търсех. Следващия път не предполагайте нищо.   -  person ProgrammerGirl    schedule 14.11.2011
comment
2 неща, 1. Не съм гласувал против нищо. Никога не обвинявайте, когато не сте сигурни. 2. Това е сайт с много висока оценка (от гледна точка на SEO) и потребителите, търсещи същия проблем като вашия, може да бъдат объркани относно отговорите, защото въпросът ви е само подобен на техните. Тук съм от известно време и минималният стандарт за въпроси тук е разумна четливост и разбираемост. И не говорете за отношението ми, не ми плащате и не ви дължа нищо. Моите коментари са там, за да помогнат на вас и другите потребители, а не да ви унижават или принизяват.   -  person Madara's Ghost    schedule 14.11.2011
comment
Вашият въпрос е подвеждащ, тъй като внушава неосъществимото изискване да го направите в една заявка. Което също е задавано и отговаряно преди: Възможно ли е да проверите дали потребителят има активирани бисквитки в php без презареждане на страницата?   -  person mario    schedule 14.11.2011
comment
@Truth: Всъщност, да, ти гласува против. Ти беше единственият изглед, когато ме понижи до -1 и остави първия си коментар по-горе. Освен това не бъркайте неразбирането на другите с вашето собствено, особено когато английският не е вашият първи език. И накрая, писането Не звучи много трудно, опитайте се да го направите сами, а не сайт за изграждане на моя код за мен, е напълно безполезно за мен и всеки друг човек, на когото може да се опитвате да помогнете. За да ви докажа, че грешите, вече имам своето решение. Така че не се колебайте да продължите да говорите със себе си, за да помогнете на другите, тъй като вече намерих това, което търся.   -  person ProgrammerGirl    schedule 14.11.2011
comment
Всъщност, не, не съм гласувал против и за да ви го докажа, наистина ще гласувам против, за да можете да станете свидетели. Също така трябва да разберете, че не сте първият, който задава подобни въпроси и ако искате някаква помощ, ще трябва да сте много наясно от какво се нуждаете. Това, което е въпрос, който не си заслужава да бъде разгледан, може да докаже обратното с добавяне на едно изречение. Както казах, никой тук, особено аз, не е тук, за да те унижи. Но не трябва да се нападате и да нападате хората. Късмет.   -  person Madara's Ghost    schedule 14.11.2011


Отговори (3)


Не можете да го направите в една стъпка, тъй като бисквитката трябва първо да бъде ИЗПРАТЕНА до браузъра и ще ви бъде върната само при следваща заявка. Така че, ако имате нещо като:

<?php
    session_start();
    session_write_close(); // unlock session file so checkcookie.php below won't block.
    setcookie(...);
?>
<html>
<body>

<img src="checkcookie.php" width="0" height="0" />

можете да накарате скрипта checkcookie.php да актуализира стойността acceptsCookie на вашата сесия.

person Marc B    schedule 14.11.2011
comment
Много умно, Марк, благодаря ти. Така че само за потвърждение, това ще го направи на една страница? - person ProgrammerGirl; 14.11.2011
comment
Да, тъй като изображението задейства отделна заявка към сървъра. Лично аз просто бих направил проверката в заявка за втора страница, тъй като използването на актив за тази цел се чувства малко „неясно“, въпреки че ще работи. - person halfer; 14.11.2011
comment
Технически две страници. Една страница задава бисквитката, а след това, когато браузърът поиска този скрипт за изображение, вашият сървър автоматично ще получи бисквитката, зададена от главната страница, ако приемем, че браузърът разрешава бисквитките. - person Marc B; 14.11.2011
comment
@Marc B: Но що се отнася до потребителя, само една страница, нали? - person ProgrammerGirl; 14.11.2011
comment
да Това обаче само информира вашия сървър за възможностите на бисквитките минута или две по-рано. Бисквитката ВСЕ ПАК ще бъде изпратена при ВСЯКА заявка, която потребителят направи на вашия сайт, и тези страници също биха могли да извършат актуализацията в този момент. Мислете за това като за ресторант, който приема резервации, но не се интересува дали правите резервационното обаждане по мобилен телефон, докато стоите пред входната врата. - person Marc B; 14.11.2011

С PHP не можете да направите това на една страница. Друг вариант би бил да проверите в javascript, след което да изпратите ajax повикване до друга php страница:

<script>
   var tmpcookie = new Date();
   chkcookie = (tmpcookie.getTime() + '');
   document.cookie = "chkcookie=" + chkcookie + "; path=/";
    if (document.cookie.indexOf(chkcookie,0) < 0) {
      //AJAX CALL IN HERE SAYING NO COOKIES
      }
    else {
      //AJAX CALL IN HERE SAYING ACCEPTING COOKIES
    }
</SCRIPT>
person Clint    schedule 14.11.2011
comment
Съжалявам, не разбрах, че не можете да използвате javascript. Моя грешка. - person Clint; 14.11.2011

PHP сам не може да определи дали даден потребител е приел бисквитка или не в една страница.

PHP изпраща бисквитката като заглавка и след това чете заглавките, изпратени от клиента при заявка на следващата страница. PHP не може да намери дали бисквитката е приета или не на същата страница, на която е доставена. Това е царството на JavaScript.

person Madara's Ghost    schedule 14.11.2011