- Php cookie не удаляется / не удаляется — не удается выйти
- Решение
- Другие решения
- Remove a cookie
- 22 Answers 22
- PHP Cookie — практические примеры использования
- Как установить куки в PHP
- Как получить, прочитать, проверить cookie в PHP
- Авторизация с использованием PHP Cookie
- как удалить все куки моего сайта на php
- 11 ответов:
Php cookie не удаляется / не удаляется — не удается выйти
Поэтому я попробовал несколько других «решений» своей проблемы (как на этом сайте, так и на других) и не могу найти решение, которое работает для меня.
Я пытаюсь установить cookie для входа в систему моего пользователя, а затем при выходе удалить этот cookie. Вот мой код
Который проверяет, что имя пользователя и пароль были введены в форму входа в систему (и приняты). Если это так, файл cookie «Имя пользователя» устанавливается с именем пользователя, полученным из базы данных, и временем, равным 90 дням, и затем пользователь перенаправляется ,
Эта часть работает нормально, она регистрирует пользователя, как и следовало ожидать.
Однако в части удаления,
Я удаляю cookie таким же образом, как он был установлен, как и ожидалось, удаляя любые данные и устанавливая время в отрицательное значение, а затем для хорошей меры я запускаю неустановленный cookie, чтобы убедиться, что он исчез.
За исключением того, что это не работает. setcookie (для удаления) ничего не делает, а unset cookie работает только на странице после того, как он был запущен (в данном случае index.php), и как только я нажимаю на другую страницу или обновляю страницу, которую он «забывает» что cookie был удален.
Теперь перейдем к элементу проверки Chrome, чтобы проверить куки, которые я получаю.
Наблюдая за процессом после нажатия кнопки выхода, этот файл cookie никогда не удаляется. Единственное, что действительно может удалить cookie — это перезаписать его новым cookie (войти снова) или удалить его с помощью элемента inspect.
Есть идеи? Насколько я знаю, я делаю все, что должно быть сделано.
РЕДАКТИРОВАТЬ:
Я также хотел бы отметить, что при тестировании на локальном хосте, в автономном режиме через netbeans, эта функция работает. Однако, когда я загружаю страницы в Godaddy для моего сайта, они перестают работать должным образом.
Решение
Я нашел ответ. Это тоже глупый ответ. Вот файл полного кода, который я использовал для выхода из системы.
Проблема, которую я не могу показать здесь, заключалась в том, что у открывающего тега php был один разрыв строки, то есть он начинался со строки 2. Почему изначально так было, я не знаю, но эта маленькая ошибка означала что это работает на localhost и не работает на godaddy. Как расстраивает. По крайней мере, я исправил проблему сейчас.
Для будущего использования, для тех, кто застрял с той же проблемой, очевидно, что godaddy (или большинство хостинговых сайтов) требуют, чтобы любое добавление, редактирование или удаление файлов cookie происходило со строки 1 и далее, поэтому тег php, который включает файл cookie, должен находиться в строке 1, нет HTML-код может предшествовать этому тегу php, или любые разрывы строк, тег php должен начинаться со строки 1.
Другие решения
Вы не устанавливаете путь к вашему куки, я предполагаю, что вы хотите, чтобы он был для всего сайта, поэтому вы должны установить путь к ‘/’:
setcookie(‘Username’, $data[‘Username’], time() + 60*60*24*90, ‘/’);
А затем, когда отключите его, попробуйте использовать 1 вместо time() — 60*60*24*90 (также по-прежнему указывается путь), в противном случае время истечения срока действия куки может варьироваться в зависимости от часов компьютера пользователя:
Я думаю, что ваша проблема на самом деле заключается в том, что путь не установлен: http://php.net/manual/en/function.setcookie.php
Если установлено значение «/», файл cookie будет доступен во всем домене. Если установлено значение «/ foo /», файл cookie будет доступен только в каталоге / foo / и во всех его подкаталогах, таких как / foo / bar / домена. Значением по умолчанию является текущий каталог, в котором устанавливается cookie.
Источник
Remove a cookie
When I want to remove a Cookie I try
I see in my cookie browser from firefox that the cookie still exists. How can I really remove the cookie?
22 Answers 22
You May Try this
Set the value to «» and the expiry date to yesterday (or any date in the past)
Then the cookie will expire the next time the page loads.
A clean way to delete a cookie is to clear both of $_COOKIE value and browser cookie file :
To reliably delete a cookie it’s not enough to set it to expire anytime in the past, as computed by your PHP server. This is because client computers can and often do have times which differ from that of your server.
The best practice is to overwrite the current cookie with a blank cookie which expires one second in the future after the epoch (1 January 1970 00:00:00 UTC), as so:
That will unset the cookie in your code, but since the $_COOKIE variable is refreshed on each request, it’ll just come back on the next page request.
To actually get rid of the cookie, set the expiration date in the past:
I had the same problem in my code and found that it was a cookie path issue. Check out this stack overflow post: Can’t delete php set cookie
I had set the cookie using a path value of «/», but didn’t have any path value when I tried to clear it, so it didn’t clear. So here is an example of what worked:
Setting the cookie:
Clearing the cookie:
Hope that helps.
If you set the cookie to expire in the past, the browser will remove it. See setcookie() delete example at php.net
See the sample labelled «Example #2 setcookie() delete example» from the PHP docs. To clear a cookie from the browser, you need to tell the browser that the cookie has expired. the browser will then remove it. unset as you’ve used it just removes the ‘hello’ cookie from the COOKIE array.
This is how PHP v7 setcookie() code works when you do:
From the output of tcpdump while sniffing on the port 80, the server sends to the client (Browser) the following HTTP headers:
Observing packets in the following requests the Browser no longer sends these cookies in the headers
Just set the value of cookie to false in order to unset it,
PS:- That’s the easiest way to do it.
To delete cookie you just need to set the value to NULL:
«If you’ve set a cookie with nondefault values for an expiration time, path, or domain, you must provide those same values again when you delete the cookie for the cookie to be deleted properly.» Quote from «Learning PHP5» book.
So this code should work(works for me):
Setting the cookie: setcookie(‘foo’, ‘bar’, time() + 60 * 5);
Deleting the cookie: setcookie(‘foo’, », time() + 60 * 5);
But i noticed that everybody is setting the expiry date to past, is that necessary, and why?
To remove all cookies you could write:
If you want to delete the cookie completely from all your current domain then the following code will definitely help you.
This code will delete the cookie variable completely from all your domain i.e; » / » — it denotes that cookie variable’s value all set for all domain not just for current domain or path. time() — 300 denotes that it sets to a previous time so it will expire.
Thats how it’s perfectly deleted.
Just set the expiration date to one hour ago, if you want to «remove» the cookie, like this:
You should use the filter_input() function for all globals which a visitor can enter/manipulate, like this:
I know that there has been a long time since this topic has been created but I saw a little mistake within this solution (I can call it like that, because it’s a detail). I agree that the better solution is probably this solution:
But, in the present case, you delete the cookies in every case where the unset function works and immediately you create new expired cookies in case that the unset function doesn’t work.
That means that even if the unset function works, it will still have 2 cookies on the computer. The asked goal, in a logical point of view, is to delete the cookies if it is possible and if it really isn’t, make it expire; to get «the cleanest» result.
Источник
PHP Cookie — практические примеры использования
Привет, друзья. Пришло время поговорить о том, что такое PHP cookie, как их установить, удалить, перезаписать и где они используются. Этот урок для начинающих и полных чайников в программировании, поэтому буду показывать на конкретных практических примерах. Итак, что же такое куки в PHP? Это один из способов хранения определенных данных на стороне клиента. Если говорить проще, то куки хранятся в браузере пользователя. Например при авторизации. Когда юзер отправляет данные, они сохраняются на устройстве. Теперь давайте ближе к делу или сразу к видео
Как установить куки в PHP
Все не так сложно, как может показаться. Установка cookie происходит следующим образом:
Это базовые значения, которые обязательны для заполнения. Но параметров гораздо больше, а именно 7! Семь, Карл! И вот для чего каждый из них нужен.
1 | Name | Название (имя) cookie |
2 | Value | Значение (как правило переменная) |
3 | Expires | Время жизни куки |
4 | Path | Путь для которого будут сохранены куки |
5 | Domain | Можно указать поддомен (‘.domain.ru’) |
6 | Secure | Использование только на HTTPS (true или false) |
7 | HttpOnly | Использование только на HTTP (true или false) |
В подавляющем большинстве случаев используются первые 3 параметра чтобы записать cookie в PHP. То есть имя, значение и время жизни. Этого вполне достаточно для полноценной работы. Давайте к практике.
setcookie(‘name’, 5, time()+60)
Здесь я установил cookie name со значением — 5, которая удалится через 1 минуту.
Как получить, прочитать, проверить cookie в PHP
В этом нам поможет глобальный массив COOKIE. Чтобы получить значение куки нам нужно вызвать ее по имени.
Как вы уже догадались, на экран выведется пятерка. Теперь сделаем проверку. Если данная кука была установлена, то выедем одно сообщение, если не была, то другое.
Есть один маленький нюанс. При первом заходе на страницу будет выведено сообщение, что куки не установлены, однако, если заглянуть в консоль браузера, то увидим, что она там есть. В чем же дело? Элементарно. Дело в том, что запрос на проверку и сама установка куки идут ОДНОВРЕМЕННО. Поэтому сообщение об успешной установке мы увидим только после следующей перезагрузке страницы.
Теперь у нас есть условие и его можно использовать в некоторых случаях.
Авторизация с использованием PHP Cookie
Для примера я создам 2 формы. Первая с одним единственным полем, в которое будем писать свое имя. Пока не будет введено и отправлено имя, пользователю будут недоступны некоторые элементы страницы. То есть, если он не авторизован, то какие-то функции сайта от него будут скрыты, а так же показано приветствие. После того, как данные с формы будут отправлены, эта форма будет скрыта и показана другая, которая просто будет запоминать все данные, введенные пользователем.
Источник
как удалить все куки моего сайта на php
Мне интересно, могу ли я удалить все файлы cookie моего сайта, когда пользователь нажимает на выход из системы, потому что я использовал эту функцию для удаления файлов cookie, но она не работает должным образом:
есть ли способ удалить куки одного домена в PHP?
11 ответов:
взятый с этой страницы, это будет отменить все куки для вашего домена:
еще лучше, однако, помнить (или хранить его где-то), какие куки установлены с вашим приложением на домене и удалить все это напрямую.
Таким образом, вы можете быть уверены, чтобы удалить все значения правильно.
Я согласен с некоторыми ответами выше. Я бы просто рекомендовал заменить «time () -1000» на «1». Значение » 1 » означает 1 января 1970 года, что обеспечивает экспирацию 100%. Таким образом:
убедитесь, что вы вызываете свою функцию setcookie, прежде чем какой-либо выход произойдет на вашем сайте.
кроме того, если ваши пользователи выходят из системы, вы также должны удалить/аннулировать их переменные сеанса.
когда вы меняете имя вашего куки, вы также можете удалить все куки, но сохранить один:
вы должны знать о различных инструментах отслеживания, таких как Google Analytics, также используют куки в вашем домене, и вы не хотите их удалять, если хотите иметь правильные данные в GA.
единственным решением, которое я мог получить, было установить существующие куки в null. Я не мог удалить куки из клиента.
поэтому для выхода пользователя из системы я использую следующее:
конечно, это не удаляет все куки.
Я знаю, что этот вопрос старый, но это гораздо более простая альтернатива:
но будьте осторожны! Он будет стереть все заголовки, включая cookies, сессии и т. д. как поясняется в документы.
предоставленные ответы не решили мою проблему,
- удалить куки родительского домена (из a.b.c; удалить B. c; cookies),
- удалите файлы cookie с более высокого пути, кроме root.
мой скрипт делает, видите.
это не самое красивое / безопасное / оптимальное решение, поэтому используйте его только в том случае, если вы не знаете путь к файлу cookie и / или домен cookie. или используйте эту идею для создания вашего версия.
все предыдущие ответы упустили из виду, что setcookie можно было бы использовать с явной домен. Кроме того, файл cookie мог быть установлен на более высоком поддомене, например, если вы были на foo.bar.tar.com домен, там может быть набор файлов cookie на tar.com . Поэтому вы хотите отключить файлы cookie для всех доменов, которые могли удалить файл cookie:
используйте функцию для очистки файлов cookie:
Если вы передадите true тогда понятно данные, в противном случае данные сеанса.
Источник