Javascript 关闭php上的窗口后,关闭所有打开的资源
我有一个使用一些资源的对象,比如Javascript 关闭php上的窗口后,关闭所有打开的资源,javascript,php,Javascript,Php,我有一个使用一些资源的对象,比如 class UseResources { protected $proc_open; public function __construct() { $this->proc_open = proc_open( ... ); } public function cleanup() { proc_close($this->proc_open); } }; 我
class UseResources {
protected $proc_open;
public function __construct()
{
$this->proc_open = proc_open( ... );
}
public function cleanup()
{
proc_close($this->proc_open);
}
};
我试图在.unload
事件上发送一个ajax请求,但这不是我想要的
我想在用户关闭窗口或浏览器后,或者连接丢失后,能够调用cleanup方法?当窗口关闭时,以及当用户刷新页面或导航到新页面时(即使新页面在您的站点中),会触发
卸载
事件。在这种情况下,我建议不要使用unload
。(unload
更好地用于提示用户在离开表单之前保存或丢失更改等操作。)
此外,如果您实现了一个javascript解决方案,您可能希望(1)要求javascript使用该站点(并向禁用JS的用户显示
元素),或者(2)编写代码,使您不单单依靠窗口关闭/清理检测例程来释放资源
我通常实施的策略是使用ping过程来完成类似的事情。基本上:客户端向服务器发送常规ping,服务器在收到ping时将连接/会话的idle
计数器重置为0
。根据需要,ping每隔一分钟左右发生一次。然后,一个长时间运行的循环线程(会话管理器,如果您愿意的话)检查空闲时间超过空闲阈值(比如3分钟,但由您决定)的所有客户端,如果超过该阈值,则释放与该连接/会话相关的资源。然后,站点中的每个页面(在适当的情况下)都会添加此ping代码,以便只要页面在浏览器中打开,客户端就会开始ping
好处
- 跟踪用户查看您的站点的时间(对于度量非常有用,尤其是与跟踪请求数量的度量结合使用时)
- 当浏览器关闭时,以及当用户离开您的站点时,关闭所有与连接相关的资源
- 如果用户在您的站点上导航到不同的页面[有ping代码],他们的连接资源将不会被清除,因为
计数器将在下一页重置idle
- 需要javascript(例如,
或setTimeout
和setInterval
)XMLHttpRequest
- 除非服务器上还有类似“身份验证超时”的情况,否则如果用户离开打开的web浏览器一段时间,客户端可能会让您的服务器(和资源)保持长时间的连接(您可以通过使用其他ping触发器(如鼠标移动、将焦点设置为表单字段、单击、滚动等)来解决此问题。)
函数pingServer(){
var-req;
if(window.XMLHttpRequest){
req=新的XMLHttpRequest();
}否则{
req=新的ActiveXObject(“Microsoft.XMLHTTP”);
}
req.onreadystatechange=函数(){
如果(req.readyState==4&&req.status==200){
警报(“服务器上的空闲计时器重置”);
}
}
var url='ping.php';//调用将重置此客户端空闲计时器的php代码
请求打开(“获取”,url,true);
请求发送();
}
var pingFrequencyMs=5*1000;//每5秒ping一次
设置间隔(pingServer、pingFrequencyMs);
抱歉,此网站需要JavaScript。