Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 20.01.2019
Сообщений: 29

Как убить куки окончательно?

21.01.2019, 19:35. Показов 3323. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть где-то предполагаемая кука которая есть в бд и на компе юзера.
Вот так она выглядит:

PHP
1
setcookie('cookie', $user->cookie, 60*60*24*365*10);
Если юзерский токен совпадает с токеном в бд (этот токен - значение поля cookie в бд), его логинит (при правильности введенных данных, само собой)

PHP
1
2
3
4
5
6
7
8
if($_COOKIE['cookie'] == $user->cookie) {
    echo  '<a href="logout/logout.php">
    <button type="button" class="btn" style="background-color:#2bbd7e; color: white; width: 110px;">
     Выйти
   </button>
   </a></div>';
}
?>
Это кнопка выхода из аккаунта. Она выполняет logout.php

Вот он сам:

PHP
1
2
3
session_start();
setcookie ('cookie', "", time() - 3600);
header("Location: /");

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

Но logout.php выполняется, однако код

PHP
1
2
3
4
5
6
7
8
if($_COOKIE['cookie'] == $user->cookie) {
    echo  '<a href="logout/logout.php">
    <button type="button" class="btn" style="background-color:#2bbd7e; color: white; width: 110px;">
     Выйти
   </button>
   </a></div>';
}
?>
Продолжает выполнятся => кука живет

Надо как то заставить куку пойти отдохнуть, помогите плиз
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.01.2019, 19:35
Ответы с готовыми решениями:

При попытке убить сессию и куки ничего не получается
Добрый день. Начал писать регистрацию, использовал механизмы сессий для сохранения куки. Так вот, при регистрации сессия и куки...

Как окончательно и бесповоротно запретить кэширование изображений браузером?
Как окончательно и бесповоротно запретить кэширование изображений браузером? Приведенные ниже строки полностью не помогают. Прокси сервера...

Как убить файлы, созданные сессией?
Стартуем сессию и в определенной папке создаются ее служебные файлы. Со временем их там накапливается очень много. Можно ли как-то...

26
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
21.01.2019, 19:40
А проблема в чём? Кука не удаляется?
0
0 / 0 / 0
Регистрация: 20.01.2019
Сообщений: 29
21.01.2019, 19:40  [ТС]
Да, я обновил вопрос. Кука прост не удаляется
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
21.01.2019, 19:52
newArray, попробуйте добавить 4-ый параметр в setcookie '/'
0
0 / 0 / 0
Регистрация: 20.01.2019
Сообщений: 29
21.01.2019, 19:56  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
newArray, попробуйте добавить 4-ый параметр в setcookie '/'
Странно. Я добавил параметр path как вы и сказали "/", ничего не изменилось
Причем я вардампнул $_COOKIE и мне выдало именно ту куку что прописана в бд, т.е. у юзера она активна должна быть. Но убираться она не хочет(
0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,882
21.01.2019, 20:38
newArray, чтобы "убить" куку, достаточно установить для нее пустое/недействительное значение, а не экспериментировать с expire (для этого параметра достаточно установить 0). Установка expire при установке куки у вас тоже странная. Также имеет смысл поддерживать expire и на стороне сервера.

Добавлено через 5 минут
Проверка в шаблоне тоже странная. Обычно проверяют существование $user или используют его логический метод или свойство.
0
0 / 0 / 0
Регистрация: 20.01.2019
Сообщений: 29
21.01.2019, 20:41  [ТС]
Добавлено через 5 минут
Проверка в шаблоне тоже странная. Обычно проверяют существование $user или используют его логический метод или свойство.
Что с ней не так? Кука активна в любом случае, я вардампаю массив $_COOKIE и она там есть, просто она удаляться не хочет. Ничего не помогает, где то ошибка

Добавлено через 1 минуту
Имеется в виду если куки (токен) юзера совпадает с куки (токеном) в бд, то его можно пустить и он будет активен пока не истечет expire (10 лет вроде)
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
21.01.2019, 20:54
Цитата Сообщение от estic Посмотреть сообщение
а не экспериментировать с expire (для этого параметра достаточно установить 0)
Если задать 0 или пропустить этот аргумент, срок действия cookie истечет с окончанием сессии (при закрытии браузера)
https://secure.php.net/manual/... parameters
0
0 / 0 / 0
Регистрация: 20.01.2019
Сообщений: 29
21.01.2019, 20:56  [ТС]
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Если задать 0 или пропустить этот аргумент, срок действия cookie истечет с окончанием сессии (при закрытии браузера)
https://secure.php.net/manual/... parameters
Вы думаете я это не читал? И что мне это дало, я же кнопку выхода из аккаунта делаю, с этим проблема)
0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,882
21.01.2019, 21:02
Цитата Сообщение от newArray Посмотреть сообщение
Кука активна в любом случае
Нет. Только если вы уже успели проверить ее существование где-то выше в коде.

Цитата Сообщение от newArray Посмотреть сообщение
просто она удаляться не хочет
А должна? Покажите хоть один нормальный источник, где это написано.

Цитата Сообщение от newArray Посмотреть сообщение
10 лет вроде
Иногда полезно читать официальное руководство, а не непонятно что.

Добавлено через 1 минуту
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Если задать 0 или пропустить этот аргумент, срок действия cookie истечет с окончанием сессии (при закрытии браузера)
И что вы этим хотели сказать? Я написал, что это не так? Хотя, конечно, бывает и не так

Добавлено через 2 минуты
newArray, забыл еще добавить, что про сравнение произвольных строк вам тоже нужно почитать. Две разные строки могут быть равны
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
21.01.2019, 21:04
Цитата Сообщение от estic Посмотреть сообщение
И что вы этим хотели сказать?
То что получив expires 0 браузер не удалит куку, а как раз будет ее продолжать использовать до закрытия браузера, а какой-нибудь chrome и после закрытия не удалит. По идее пустая строка должна удалять куку, но были проблемы с некоторыми браузерами. Так что лучше всего для удаления и значение пустое, и expires истекший, и еще четвертый параметр всегда использовать, и при установке тоже
0
0 / 0 / 0
Регистрация: 20.01.2019
Сообщений: 29
21.01.2019, 21:16  [ТС]
В том то и дело, что должно работать. А не работает. Я ваши намёки совсем не понимаю. Пытался вообще всяко. И как советовали, и как не советовали, даже переписывал и браузеры другие пробовал.
0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,882
21.01.2019, 21:28
Jewbacabra, "пустая строка" может не удалить куку, но она переустановит значение. Этого достаточно.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
21.01.2019, 21:34
Цитата Сообщение от estic Посмотреть сообщение
Этого достаточно.
Да, но чтоб лишние байты не гонять по сети лучше подстраховаться
0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,882
21.01.2019, 21:37
newArray, какие намеки? Понимайте слова "очистить куки", как "очистить/переустановить значения кук", тогда ваше представление о работе браузеров будет более точным, чем сейчас.
0
0 / 0 / 0
Регистрация: 20.01.2019
Сообщений: 29
21.01.2019, 21:43  [ТС]
Господи, я уже заплатить готов кому-нибудь. Сижу и втыкаю в буквы, вообще не соображаю. Давайте попробую подробно объяснить::::::::::

При регистрации пользователя создается поле в бд с названием "cookie", его значение - ТОКЕН, рандомные буквы типа ksdfkasfmasmfasfmkw. Идём далее:

PHP
1
2
3
if (password_verify($data['password'], $user->password)) {
           
        }
Вот этот код проверяет пароль из хеша при авторизации (в бд он лежит) с введённым паролем, который был введён в input
Если введённый пароль == пароль из БД, выполняется код:

PHP
1
2
3
4
5
6
if (password_verify($data['password'], $user->password)) {
                setcookie('cookie', $user->cookie, "/");
                    if($_COOKIE['cookie'] == $user->cookie) {
                        header("Location: /");
                    }
            }
Так как поле cookie уже присутствует в бд, мы сравниваем значение токена куки юзера с токеном куки в бд, которое соответствует аккаунту, в который пользователь входит. Если КУКИ ЮЗЕРА == КУКИ ЮЗЕРА В БД, он логинится и запоминается на какое-то время (время жизни куки). При всём при этом, всё вышесказанное работает при условии что логин и пароль введены верно. Только тогда идет сравнение токена куки юзера с токеном куки этого аккаунта в бд. Его пускает в аккаунт и он будет залогинен пока куку не сотрут с пк или пока он сам не выйдет.

Так вот, есть кнопка

HTML5
1
<div id="logout-but"><a href="logout/logout.php"><button type="button" class="btn" style="background-color:#2bbd7e; color: white; width: 110px;">Выйти</button></a></div>';
Кнопка, нажимая на которую куки стирается и забывается вообще до того момента, пока юзер не запросит его снова (не авторизируется ещё раз)

Вот код файла (logout.php), на который ссылается кнопка

PHP
1
2
3
session_start();
setcookie ('cookie', "",'/', $_SERVER['HTTP_HOST'] );
header("Location: /");
Я скоро помру уже, честное слово, не хочет оно работать как надо. Вот это весь скрипт что присутствует.

P.S.: Все статьи я уже прочитал, все варианты перепробовал. Если есть возможность - попробуйте поправить меня в коде, пожалуйста

Добавлено через 2 минуты
И я же в заголовке темы всё сказал, что у меня не получается удалить к чертям эту куку. Мне не надо её никуда переустанавливать :ССС
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
21.01.2019, 21:47
Цитата Сообщение от newArray Посмотреть сообщение
у меня не получается удалить к чертям эту куку. Мне не надо её никуда переустанавливать
Нет такой операции как удалить куку, можно только установить определенное значение. И при определенных значениях браузер куку удалит
PHP
1
2
3
<?php // 1.php
setcookie('foo', 'bar', time() + 1000, '/');
echo "set cookie";
PHP
1
2
<?php // 2.php
var_dump($_COOKIE);
PHP
1
2
3
<?php // 3.php
setcookie('foo', '', 1, '/');
echo 'drop cookie';
Заходим на /1.php - кука установлена
Заходим на /2.php - видно наличие куки в массиве $_COOKIE
Заходим на /3.php - кука удалена
Заходим на /2.php - массив $_COOKIE пуст
0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,882
21.01.2019, 21:49
Jewbacabra, вот именно, что лучше подстраховаться
0
0 / 0 / 0
Регистрация: 20.01.2019
Сообщений: 29
21.01.2019, 21:49  [ТС]
Цитата Сообщение от Jewbacabra Посмотреть сообщение
То что получив expires 0 браузер не удалит куку, а как раз будет ее продолжать использовать до закрытия браузера, а какой-нибудь chrome и после закрытия не удалит. По идее пустая строка должна удалять куку, но были проблемы с некоторыми браузерами. Так что лучше всего для удаления и значение пустое, и expires истекший, и еще четвертый параметр всегда использовать, и при установке тоже
Ну то что физически куку удалить одной операцией нельзя, это я понял часа четыре назад. Я не понимаю почему я всё делаю, вроде как правильно, но не работает всё равно
0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,882
21.01.2019, 21:58
newArray, вы даже в параметрах путаетесь. С вами не о чем разговаривать
Цитата Сообщение от newArray Посмотреть сообщение
setcookie('cookie', $user->cookie, "/");
Цитата Сообщение от newArray Посмотреть сообщение
setcookie ('cookie', "",'/', $_SERVER['HTTP_HOST'] );


Добавлено через 1 минуту
Написал же: "обратитесь к руководству" (expire - третий по счету параметр).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.01.2019, 21:58
Помогаю со студенческими работами здесь

Как убить сессию при нажатии на ссылку?
при нажатии на ссылку? echo &quot;&lt;a href='{$GLOBALS}?{f()}&amp;page={$page}&amp;id={$id}' class='menu.php'&gt;&lt;th...

Как убить все таблицы
Здравствуйте. Подскажите пожалуйста, как скриптом убить все таблицы в базе данных? В базе около 30 таблиц в которых используются внешние...

Как можно убить скрипт, запущенный через exec()?
Процессы висят почему-то в памяти. Как можно убить скрипт, запущенный через exec(). Желательно в самом скрипте Добавлено через 2 часа...

Как куки одного домена сохранить как куки другого?
Здравствуйте, такой вопрос: нужно cookie на домене aaaaaa.com сохранить как cookie домена bbbbbb.com. Как это можно сделать?

Сессию нужно убить memberid нужно принудительно убить и страницы... как ?
&lt;SCRIPT LANGUAGE=VBScript RUNAT=Server&gt; SUB Session_OnStart Session.Timeout = 3 Application.lock Application('visitors') =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru