Есть ли способ аннулировать куки пользователя? - PullRequest
0 голосов
/ 12 февраля 2012

Есть ли способ аннулировать cookie пользователя?

Сценарий:

  1. Пользователь заходит на мой сайт (я могу получить любые данные, которые я хочу);
  2. Пользователь покидает страницы;
  3. Через некоторое время приходит обратный вызов с другого сервера с идентификатором пользователя.На данный момент мне нужно аннулировать сеанс пользователя и файлы cookie.

В случае сеансов это было так просто:

session_id($user['session_id']);
session_destroy();

Как добиться того же с помощью файлов cookie?

Пожалуйста, смотрите комментарии под этим постом для более подробной информации и как это связано с Facebook.

Простым решением было бы заменить бит, где PHP-SDK хранит информацию опользователь от cookie-файлов до сеанса, но переход к файлу пакета всегда плохая идея.

Ответы [ 3 ]

3 голосов
/ 12 февраля 2012

EDIT

Ваши другие комментарии предполагают, что вы на самом деле не знаете, что такое печенье, поэтому я заранее прошу прощения, если вы уже поняли, что я собираюсь объяснить.

Хотя я подозреваю, что вам нужна некоторая помощь в Facebook для ответа или решения вашей реальной проблемы, я хотел бы указать, что на самом деле представляет собой файл cookie:

HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: name=value
Set-Cookie: name2=value2; Expires=Wed, 09 Jun 2021 10:18:14 GMT

http://en.wikipedia.org/wiki/HTTP_cookie#Setting_a_cookie

Именно так куки передаются между клиентом и сервером (запросчик / ответчик). Вы можете использовать вкладку «Сеть» в Firebug или Chrome Console, чтобы увидеть, как выполняются запросы и какие данные отправляются туда и обратно. По своей природе они не систематически «регистрируются», не являются конечными «вещами» сами по себе, а просто являются частью заголовка, который включен в пакет запроса и ответа, что-то вроде поля CC / BCC в заголовке электронной почты: pseudo преходящий, но описательный.

Для достижения эффекта Cookies проверяются перед использованием , вам нужно будет определить, как прикрепить ссылочный идентификатор к cookie, или (альтернативно) обнаружить определенный cookie с вычисленным кодом, который должен быть присутствует, когда другие данные представлены в запросе. Другой подход описан в ответе Яна .

Однако файлы cookie обычно не обрабатываются таким образом. Это просто транспорт, средство для достижения цели, заполнение пустоты между GET и POST.


Вы не «лишаете законной силы cookie», а ограничиваете полномочия, которые данные cookie распространяют на тех, кто использует их вместе с запросами.

Во-первых, откуда вы знаете, что это с другого сервера? Во-вторых, если вы можете определить, что запрос не является законным, необходимо удалить все ссылки на файлы cookie на вашем сервере, чтобы дать ему разрешение на выполнение действий от имени пользователя, т. Е. Любой указанный сеанс завершен / уничтожен или остальное.

Однако cookie - это только транспорт для этих данных. Вы должны иметь возможность перехватывать, обнаруживать и блокировать любой доступ, который он предоставляет владельцу, чтобы сделать его «бесполезным».

Если вы спрашиваете что-то конкретное, пожалуйста, предоставьте больше информации. Но, по сути, кажется, что все, что вам нужно сделать, это иметь способ игнорировать куки-файлы, которые содержат данные, которые вы определили как недействительные или аутентичные, или предоставляют неправильный доступ (самозванцам).

1 голос
/ 12 февраля 2012

Вы не можете установить (сбросить / аннулировать) файл cookie для пользователя, который не отправляет запрос на ваш сервер напрямую.Вам придется проделать еще немного работы.

Я бы сказал об этом следующим образом:

Сохраните файлы cookie, которые вы где-то установили для пользователя (db, redis и т. Д.).Таким образом, вы будете знать, какие файлы cookie есть у пользователя.Затем, когда приходит запрос на аннулирование, пометьте куки для этого пользователя в вашем хранилище как удаленные (или что-то в этом роде).Затем каждый раз, когда пользователь запрашивает вашу страницу, проверяет, есть ли у него какие-либо удаленные файлы cookie в вашем хранилище.Если он уничтожил свою сессию и объявил недействительными свои куки-файлы (например, установив их в прошлом).

0 голосов
/ 12 февраля 2012

Cookie живет на стороне клиента, вы ничего не можете сделать с ним на стороне сервера.Однако, если ваше «Через некоторое время» означает, что срок действия файла cookie истекает через некоторое время, вам следует установить время истечения срока действия, когда вы установите файл cookie.Вам не нужно беспокоиться о том, находится ли пользователь на своей странице или нет, потому что, если он уйдет и снова получит доступ через некоторое время, браузер с этим справится.

Например, код нижепоказывает, как установить cookie, срок действия которого истекает через 1 час.

$value = 'something from somewhere';

setcookie("TestCookie", $value);
setcookie("TestCookie", $value, time()+3600);  /* expire in 1 hour */
setcookie("TestCookie", $value, time()+3600, "/~rasmus/", "example.com", 1);
...