Подтвердить что ты не робот

Как удалить PHPSESSID на клиентских компьютерах

ОБНОВЛЕНИЕ ПРОБЛЕМЫ:

  • В некоторых браузерах у нас есть два PHPSESSID.
  • Один PHPSESSID не установлен мной нигде в моем script
  • У него есть HOST (вместо DOMAIN для PHPSESSID, который я установил), как www.mywebsite.com
  • Я попытался удалить его с помощью setcookie: setcookie ("PHPSESSID", $_COOKIE['PHPSESSID'], time() - 864000, '/', 'www.mywebsite.com');, но это не удается.
  • Попытка удалить cookie с помощью: setcookie ("PHPSESSID", $_COOKIE['PHPSESSID'], time() - 864000, '/'); приводит к удалению установленного PHPSESSID.
  • Я попытался использовать session_name, чтобы переименовать установленную мной СЕССИЮ. Это работает, но через несколько минут он разбил мой сервер.
  • У меня нет вариантов.

Я работаю с PHP-сессиями на своем веб-сайте.

Путь к сеансу был /folder, позже я был изменен на/в соответствии с новой целью.

Теперь старые пользователи не могут войти в систему.

Кажется, теперь у них есть два PHPSESSID, хранящихся в их браузерах: один с папкой path/, а другой //./p >

Что я могу сделать, чтобы старые пользователи могли войти в систему, гарантируя, что сеанс со ссылкой "/".

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Когда я сказал два phpsessionid, обратитесь к изображению

два PHPSESSID

  1. Вход работает, если я использую

а. session_set_cookie_params(864000, '/cv', '.website.com', 0, 1);

но не работает, если я использую:

В. session_set_cookie_params(864000, '/', '.website.com', 0, 1);

  • Если я использую Version 2A выше, сеанс будет доступен только в /cv и не будет доступен в других папках веб-сайта, например./Папки.

ОБНОВЛЕНИЕ НА УДАЛЕНИЕ PHPSESSID С JAVASCRIPT

  • Когда я запускаю alert (document.cookie), он показывает все файлы cookie, кроме PHPSESSID
  • Следовательно, все попытки удалить cookie PHPSESSID не удаются, тогда как другие файлы cookie могут быть удалены.

ОБНОВЛЕНИЕ НА УДАЛЕНИЕ PHPSESSID С PHP

  • Когда я var_dump($_COOKIE['PHPSESSID']); возвращается то, что значение PHPSESSID имеет путь /cv
  • Попытка удалить с помощью setcookie ("PHPSESSID", "", time() - 3600); завершается с ошибкой.
4b9b3361

Ответ 1

Я думаю, что вы смешиваете вещи, или вам нужно более подробно рассказать о своей настройке/проблеме.

Путь сеанса PHP - это место, где данные сеанса хранятся на вашем сервере, а не на клиенте. См. Документацию: https://secure.php.net/manual/en/session.configuration.php#ini.session.save-path

Вы можете перемещать эти файлы и заменять/удерживать в случае коллизий, как вы считаете нужным. Это в значительной степени ограничено только разрешениями на чтение/запись при доступе/перемещении материала и вашим пользователем веб-сервера (например, apache или nginx) или php-пользователем для чтения/записи их из/в новое местоположение.

Если "PHPSESSID в своем браузере" означает, что идентификатор сеанса является частью ваших URL-адресов, это другой PHP-параметр, который в любом случае должен быть отключен, см. уведомление в документации: https://secure.php.net/manual/en/session.configuration.php#ini.session.use-trans-sid

в зависимости от вашего обновленного вопроса:

Уже существует хорошее JS-решение для истечения срока действия старого файла cookie. Я бы пошел с этим. если вы не можете просто сделать это, вы можете сделать перенаправление на /cv там, где есть php-script, который читает файл cookie и где-то хранит данные (например, базу данных на основе user_id) и истекает срок действия cookie. Затем вы можете перенаправить на старую страницу, искать "/" - файл cookie и восстанавливать данные. Это очень уродливый взлом, но я не думаю, что вы можете получить cookie для каждого пути в PHP, так как он является серверным и основан на идентификаторе сеанса, предоставленном клиентом (но я могу ошибаться).

Ответ 2

Я бы просто закончил файл cookie с /folder. Это должно оставить только один сеансовый файл cookie для /

setcookie('PHPSESSID', '', time() - 86400, '/folder/');

Ответ 3

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

session_name("SESSION_ID");
session_start();

Ответ 4

Вам нужно удалить cookie на стороне клиента. Это возможно с помощью javascript.

Попробуйте этот javascript на своем сайте:

<script type="text/javascript">
     document.cookie = "PHPSESSID=;Path=/cv;expires=Thu, 01 Jan 1970 00:00:01 GMT;";
</script>

Пример:

В этом примере используется сайт https://developer.mozilla.org/en-US/.
Если я загружаю этот сайт в файлы cookie, следующие записи введите описание изображения здесь Теперь я хочу удалить cookie с именем dwf_section_edit. Чтобы удалить этот файл cookie, я установил дату истечения срока действия в прошлое. После выполнения

document.cookie = "dwf_section_edit=;Path=/;expires=Thu, 01 Jan 1970 00:00:01 GMT;";

на консоли, cookie отключен, как вы можете видеть на следующем изображении (я использовал небольшую кнопку обновления внизу слева от таблицы, потому что в этом примере это только временно)

введите описание изображения здесь

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

Ответ 5

Я думаю, ваш script не знает, к какому сеансу следует обращаться через session_start();

Попробуйте указать правильный путь для сеанса, используя

ini_set('session.cookie_path', '/');

или

session_start(['cookie_path' => '/']);

в зависимости от вашей настройки

Если это не поможет, я бы предложил использовать session_regenerate_id(), который заменит текущий идентификатор сеанса на новый, и сохраните текущую информацию о сеансе.

Ответ 6

Решение позволит пользователям перейти к пути /папка в течение времени окончания сеанса. На этом пути сделайте php script для копирования ВСЕХ COOKIES из/в каталог /path с помощью функции setcookie (http://php.net/manual/ro/function.setcookie.php)

foreach ($_COOKIE as $key => $value) {
    setcookie($key, $value, $expire, "/")
}
// redirect to "/" now. User will be able to login.

Дополнительное объяснение: файлы cookie привязаны к пути и домену, его важно (и по умолчанию его /, но, похоже, не в вашем случае). Поэтому PHPSESSID из подпапки (например,/folder или /me ) недоступен из родителя. И они распространяются от родителя к ребенку. Таким образом, файлы cookie от /me такие же, как для/с там, где они не указаны явно.

Ответ 7

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

session_start();
header("Set-Cookie:PHPSESSID=".session_id()."; expires=Sat, 07-Nov-1999 14:58:07 GMT; path=/cv/");

В первый раз у вас есть старый путь к файлу cookie, но из второго вызова страницы будет сохранен и передан только файл cookie в пути /.

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

Ответ 8

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

Это (верхняя часть вашей страницы) будет делать, просто сначала session_start():

setcookie('PHPSESSID', '', -3600, '/cv');

Это работает безупречно во всех моих доменах, у меня была эта проблема.

Ответ 9

Вы можете удалить его, установив его в предыдущее время для его истечения:

setcookie('phpsessid','value',time()-1);

Ответ 10

Просто укажите 4-й аргумент при вызове функции setcookie:

setcookie ("PHPSESSID", "", time() - 3600, '/');

Объяснение

4-й аргумент функции setcookie() - это $path сеанса, который должен быть установлен. И для этого: "Значение по умолчанию - это текущий каталог, в который установлен файл cookie". (См. http://php.net/manual/en/function.setcookie.php.) Поэтому, если вы вызываете эту функцию из файла, находящегося в папке "/folder", он попытается удалить cookie из этой папки. Установив $path в "/", мы сообщаем функции удалить session_id из корневого каталога.

Я протестировал его и удалил PHPSESSID из файла cookie.

Ответ 11

Давайте вернемся к основам. Вот что, я считаю, вам следует попробовать: запустите свой сайт. Обратите внимание на PHPSESSID. затем закройте браузер полностью, откройте браузер снова, а затем запустите свой сайт. Проверьте PHPSESSID и проверьте, не совпадают ли они.

Если это не то же самое, это не файл cookie, а идентификатор сеанса, специфичный для сеанса браузера. Во-вторых, если PHPSESSID такой же, как и в первый раз, то это файл cookie, и вы "удалите любую пару ключей = > значение, установленную для ресурсов cookie. Возможно, вы ссылаетесь на что-то неправильно в JS или PHP-коде.

Пожалуйста, попробуйте это и верните результаты. Это даст намного больше ясности. Сессии, LocalStorage, IndexDB, Cookies - это разные вещи и ссылки по-разному.

Ответ 12

Вы не можете удалить Cookie из браузера Cleint

Прежде всего вам нужно понять, что вы не можете удалить COOKIES на клиентских системах любыми способами. Когда вы недействительны, браузер не удаляет его, но делает cookie unvalid. Файл cookie все еще присутствует в системе клиентов. Но браузер просто игнорирует его. Чтобы удалить его, клиент должен сделать это сам.

Чтобы недействить все сеансы, вы можете использовать

session_start(); // initialize session
session_destroy(); // destroy session
setcookie("PHPSESSID","",time()-3600,"/"); // delete session cookie

или код javascript:

document.cookie = "PHPSESSID=; expires=Thu, 01 Jan 1970 00:00:00
        UTC;path=/;host=localhost";

В каждом случае вы не можете удалить cookie, установленный браузером. Поскольку PHP и javascript могут выдавать команды только для того, чтобы недействить уже установленные файлы cookie.

Только способ удаления файлов cookie

  • Клиент сам.

  • Направление очистки файлов cookie и кеша

  • Удалите браузер, а затем снова установите его.

Рекомендации по достижению цели

Создайте новый php script и вставьте его в начало login.php и в этом script проверьте, есть ли два PHPSessionId, а если есть два, то уничтожайте их все и перезагрузите страницу. Пока вы не перезагрузите последний куки файл, используемый до того, как какое-либо событие будет включено. Вы должны перезагрузить страницу или использовать перенаправление:

Удаление двух PHPSESSID

 count=0;

 foreach($_COOKIE as $key => $value){
    if ( $key == "PHPSESSID" ){
       count++;
    }
 }
 if (count>1){
    //Destory all cookies here
    foreach($_COOKIE as $key => $value){
          setcookie($key,"",time()-3600,"/");
    }

    //Reload/redirect the current page to dispose of all things
    header("Locations:" . $your_url);
    exit(0);
 }

Теперь в каждом случае будет только сеанс PHPSESSID