Почему закрытие вкладки не удаляет файл cookie сеанса?

StackOverflow https://stackoverflow.com/questions/805895

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Если вы закроете браузер, файл cookie сеанса будет удален, так почему бы не закрыть вкладку, чтобы получить тот же результат?

Поэтому я использую PHP5 и jQuery.Могу ли я что-нибудь сделать, чтобы при закрытии вкладки я мог исправить эту проблему с сеансом?К сожалению, событие onbeforeunload в теге BODY здесь бесполезно, поскольку, когда вы щелкаете за пределами страницы, оно запускает это событие, а не просто закрывает вкладку.

Это было полезно?

Решение

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

Я не знаю никакого реального способа обойти это.

Другие советы

Так задумано, и пытаться изменить это — очень плохая идея.Что, если пользователь откроет ссылку в новой вкладке и закроет ее?Следует ли уничтожить сеанс на исходной вкладке?Конечно, нет!Это демонстрирует, почему не стоит даже думать об этом.

Сеанс заканчивается, когда закрывается последнее окно браузера.Если вы хотите чего-то другого, вы:

  1. не хочу сеансов;
  2. необходимо сделать собственную «мини-сессионную» инфраструктуру;
  3. вероятно, их ждет мир обид и ошибок.

Вы также можете написать JavaScript, который определяет, когда вкладка закрыта, и удаляет файл cookie в JavaScript.

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

Я нашел обходной путь.

я работаю в ASP.NET C#.у меня есть Master Page для всех страниц сайта, кроме Login страница.в Master Page Север Page Load event Я понимаю Url ссылающейся страницы и проверяю, содержит ли она корень сайта, если нет, я перенаправляюсь на Login страница, и поскольку на ней этого нет Master Page он отображается.

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

Это код

   if (Request.UrlReferrer == null || !Request.UrlReferrer.AbsoluteUri.ToString().Contains("root"))
        {
            Response.Redirect("~/Account/Login.aspx");
        }

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

Если вы хотите быть дополнительно уверены, что можете уничтожить файл cookie сеанса и аутентификации в этом if перед перенаправлением на Login страница.

Это не будет работать, когда пользователь перешел на другой сайт на той же вкладке и нажал кнопку браузера. back to Кнопка, потому что она работает с кешем и не отправляет запрос на сервер автоматически.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top