Предотвращение вызова onbeforeunload() при обновлении

#php #javascript #ajax #javascript-events

#javascript #php #ajax #dom-события

Вопрос:

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

 window.onbeforeunload = function() { 
document.write("<?php session_destroy();
?>");
 }
  

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

Комментарии:

1. Это не работает нормально, ваш сеанс будет уничтожен при загрузке страницы. Вы не можете просто смешивать javascript и PHP, это не сработает, поскольку Javascript работает на стороне клиента, а PHP — на стороне сервера.

2. Как мы можем уничтожить сеанс при закрытии браузера?

Ответ №1:

Сеансы уничтожаются, когда браузер закрывается по умолчанию. Это фактически контролируется параметром конфигурации PHP session.cookie_lifetime . Из руководства по PHP:

session.cookie_lifetime указывает время жизни файла cookie в секундах, который отправляется в браузер. Значение 0 означает «пока браузер не будет закрыт». По умолчанию равно 0.

То, что вы пытаетесь сделать, явно уничтожить данные сеанса на стороне сервера при закрытии браузера, не может быть выполнено. Невозможно определить (по крайней мере, из Javascript), перезагружается ли страница или браузер закрывается — оба события запускаются onunload() и onbeforeunload() одинаковым образом.

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