Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用户关闭浏览器时将状态更改为0_Php_Jquery_Session - Fatal编程技术网

Php 用户关闭浏览器时将状态更改为0

Php 用户关闭浏览器时将状态更改为0,php,jquery,session,Php,Jquery,Session,我正在尝试建立一个简单的系统来显示用户是否在线。但我有一个问题 当用户关闭tap或浏览器时,ajax代码无法刷新处理用户跟踪活动的页面 我的php代码,如果用户处于非活动状态2分钟,则将值更改为0 if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 61)) { $query = "UPDATE [ccc].[users] SET active = 0 WH

我正在尝试建立一个简单的系统来显示用户是否在线。但我有一个问题

当用户关闭tap或浏览器时,ajax代码无法刷新处理用户跟踪活动的页面

我的php代码,如果用户处于非活动状态2分钟,则将值更改为0

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 61)) {
    $query = "UPDATE  [ccc].[users] SET active = 0 WHERE ldap ='$ldap'";

    sqlsrv_query($conn,$query);
}
每5秒检查一次的jquery代码

$(document).ready(function () {
/*check existing users*/
function session_checking() {
    $.post("../ajax-session.php", function (data) {

    });
}
setInterval(session_checking, 5000);
});

如果用户关闭浏览器,如何将状态更改为0?

为此使用setcookie

setcookie('newtest', 'newtest', 0);

只需设置一个变量,该变量在登录过程中包含会话数据。因此,您可以稍后检查用户是否处于活动状态。比如:

$_SESSION["user"] = array(
   "s_name" => "user1@email.com", 
   "login_time" => time()
);


if($_SESSION["user"]["login_time"] < time()+2*60){ unset($_SESSION["user"]); }

in application:
if(isset($_SESSION["user"])){ ... }
$\u会话[“用户”]=数组(
“s_名称”=>“user1@email.com", 
“登录时间”=>time()
);
如果($_会话[“用户”][“登录时间”]
据我所知,当用户关闭选项卡/窗口时,无法通知服务器

也许您可以创建一个任务,该任务会不断检查用户的活动,使其不活动:

UPDATE users SET is_online = 0 WHERE is_online = 1 AND last_activity <= [WHAT YOU NEED]

updateusers SET为_online=0,其中_online=1和最后一个_活动,但当用户关闭浏览器时,ajax代码将不起作用,因此无法访问if statement'(isset($_SESSION['last_activity'])&(time()-$_SESSION['last_activity']>61))你能详细介绍一下它的工作原理吗?你应该使用cron文件,该文件每分钟运行一次。如果用户在3分钟内没有进行任何活动,那么你必须取消所有会话。如果用户关闭浏览器5小时,他将保持活动状态,直到他回来!。我认为这不是有效的解决办法。跟踪用户在网站上花了多少钱很好,但不知道他是否在线,会话将在浏览器关闭时结束。谢谢,我会尝试你的想法,它可能会像我一样工作,如果你对我的帮助感到感激,别忘了投票支持我的答案:)