当刷新时防止onbeforeunload()被调用

问题描述:

我有一个网页,当用户关闭标签或浏览器时,我正在销毁会话。这是我的脚本当刷新时防止onbeforeunload()被调用

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

我的问题是我想只在浏览器关闭时销毁会话。我应该使用哪个事件?这是可能的所有浏览器。?请帮忙。

+6

这不能正常工作,您的会话将在页面加载时被破坏。你不能只是混合JavaScript和PHP,它不会工作,因为Javascript是客户端和PHP是服务器端。 – TJHeuvel

+0

如何在关闭浏览器时销毁会话? – ravi404

浏览器在默认情况下关闭时会话被破坏。这实际上由PHP配置选项session.cookie_lifetime控制。 From the PHP manual

session.cookie_lifetime指定发送给浏览器的cookie的生命周期(以秒为单位)。值0意味着“在浏览器关闭之前”。默认为0。

你正在尝试做的,明确地在服务器端删除会话数据时,在浏览器关闭,无法做到。无法告诉(至少从Javascript)页面是重新加载还是浏览器正在关闭 - 两个事件都以相同的方式触发onunload()onbeforeunload()

关于这一点的另一点是,它会涉及到在浏览器关闭时向服务器发送请求,这是不太可能被允许和不可信赖的 - 毕竟,如果服务器未能响应呢?这可能会导致浏览器一直在等待响应,这会破坏用户体验,浏览器开发人员永远不会允许。