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

Почему не закрывается вкладка Удалить сеанс Cookie?

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

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

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

4b9b3361

Ответ 1

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

Я не знаю об этом в любом случае.

Ответ 2

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

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

  • не нужны сеансы;
  • необходимо создать собственную инфраструктуру мини-сессии;
  • вероятно, в мире обид и ошибок.

Ответ 3

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

Ответ 4

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

Ответ 5

Я нашел работу вокруг.

Я работаю в ASP.NET C#. У меня есть Master Page для всех страниц сайта, кроме страницы Login. В Master Page Sever 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");
        }

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

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

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

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