gpt4 book ai didi

PHP 在 session 销毁或垃圾​​回收之前调用函数

转载 作者:行者123 更新时间:2023-12-01 05:31:30 30 4
gpt4 key购买 nike

我尝试在用户登录和注销网站时将用户事件记录在我的数据库中。这工作正常,但是当他们通过选项卡或浏览器关闭页面时,无法运行注销查询,因此根据记录,用户永远不会注销该网站。

方法一:我已经尝试过 onbeforeunload,但这似乎不会在页面关闭之前触发。

方法2:我会尝试使用发送到 php 的 ajax keepalive token 的方法,但这需要每 1 分钟运行一次,并且可能会导致高流量负载。

方法3:我希望一个替代方案是将 session.gc.maxlifetime 设置为 1 分钟,并通过销毁 session 回调添加对注销查询的调用。

哪种方法是最好的方法,或者是否有更好的方法来实现这一目标?

有没有办法在 php 销毁 session 或 php 垃圾收集发生之前触发自定义函数(查询)?

更新

我听取了大家的建议,决定尝试“方法1”。到目前为止,这是我的尝试,但它仍然不能完美工作:

    var isClosePage = true; 

//detect f5 and backspace page navigation
$(document).on('keypress', function(e)
{
if (e.keyCode == 116)
{
alert('f5');
isClosePage = false;
}
if (e.keyCode == 8)
{
alert('backspace');
isClosePage = false;
}
});

//detect back and forward buttons
$(window).bind('statechange',function()
{
alert('back');
isClosePage = false;
});

//detect page button press
$('html').on('mouseenter', function()
{
console.log('mouse has enetered!');
isClosePage = false;
});

//detect browser buttons press
$('html').on('mouseleave', function()
{
console.log('mouse has left!');
isClosePage = true;
});

//make ajax call (logout) to server if above events not triggered
$(window).on('beforeunload', function(e)
{
if(isClosePage)
{
$.ajax(
{
url:'php/function/active-user.php?logout=ajax',
dataType: 'jsonp',
crossDomain: true,
async: false
});

//return 'some default message';
}
else
{
isClosePage = true;
}
});

有人可以建议我如何改进这项工作吗?

最佳答案

当您谈到方法 1 时,您是在客户端进行操作,对吧?
该接口(interface)是window.onbeforeunload,这是一个使用示例:

window.onbeforeunload = function(e) {
// call server script to log the user activity to database ...
};

事件 window.onbeforeunload 在页面卸载(选项卡/窗口/浏览器关闭)之前触发。

关于PHP 在 session 销毁或垃圾​​回收之前调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37004674/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com