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

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

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

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

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

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

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

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

БОЛЬШЕ ИНФОРМАЦИИ

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

два PHPSESSID

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

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

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

B. 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 с path / cv
  • Попытка удалить с помощью setcookie ("PHPSESSID", "", time() - 3600); выходит из строя.

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

Путь сеанса 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-скрипт, который читает куки-файл и хранит данные где-нибудь (база данных, например, на основе user_id), и истекает срок действия cookie. Затем вы можете перенаправить на старую страницу, искать «/» – файл cookie и восстанавливать данные. Это очень уродливый взлом, но я не думаю, что вы можете получить cookie для каждого пути в PHP, так как он является серверным и основан на идентификаторе сеанса, предоставленном клиентом (но я могу ошибаться).

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

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

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

 session_name("SESSION_ID"); session_start(); 

Вы должны удалить 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 в этом примере, потому что Mozilla возвращает его мне. На вашем сайте вам не нужно снова создавать старый файл cookie, и все в порядке.

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

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

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

или

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

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

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

Решение позволит пользователям перейти в / путь к папке на время окончания срока действия сеанса. На этом пути создайте скрипт php для копирования ВСЕХ COOKIES из / в каталог / путь с помощью функции 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 такие же, как для / с там, где они не указаны явно.

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

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

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

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

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

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

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

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

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

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

Просто setcookie 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.

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

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

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

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

Прежде всего, вам нужно понять, что вы не можете удалять 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-скрипт и вставьте его в начало login.php, и в этом скрипте вы проверите, есть ли два 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 в каждом случае