如何在php中进行自动注销
How can make automatic logout in php
我通过登录/注销来创建web。
如果在web上按下任何链接或按钮,我会调用ajax函数来检查登录情况,如果时间过期,则注销用户。在注销功能中,我更新我的数据库。
但如果我关闭浏览器或页面,用户不会注销,数据库也不会更新。如何为其添加事件侦听器。
PHP文件
if (isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
switch ($action) {
case "checkLogin":
echo isLogged();
break;
case "logout":
logout();
break;
//and more
}
}
function isLogged() {
$data = array(
"login" => 0,
"username" => "null"
);
if(isset($_SESSION["user"]) && isset($_SESSION["start"])) {
$session_start = $_SESSION["start"];
//more then 600 sec
if(time() - $session_start < 600){
$data = array(
"login" => 1,
"username" => $_SESSION["user"]
);
}else{
logout();
}
}
return json_encode($data);
}
function logout(){
if(isset($_SESSION["user"])) {
$connection = connectToDB();
if($connection != null) {
$nickname = $_SESSION["user"];
$time = date("Y-m-d H:i:s");
$sql_statement = "UPDATE users SET is_login='0',last_login='$time' WHERE username='$nickname';";
$connection->query($sql_statement);
}
session_destroy();
}
}
没有可靠的方法来"监听"用户关闭你的窗口,或者,正如@Taplar所指出的,关闭他们的计算机。使用本问题中描述的在会话中存储登录时间的技术,您可以运行cron或其他类型的后台任务,检查数据库中是否有将要过期的会话,然后在那里过期。
您可以使用async-false添加unload侦听器,因此浏览器将在请求未完成时等待:
$(window).unload(function() {
$.ajax({
type: 'GET',
url: '/logout',
async: false
});
});
请注意,浏览器在请求期间会"挂起",这可能会混淆用户
相关文章:
- 当用户关闭浏览器选项卡时,如何使用 PHP 或 javascript 从我的站点注销用户
- PHP-window.onbeforeunload和自动注销冲突
- PHP自动注销,无需刷新页面
- 谷歌登录API - 如何使用PHP注销某人
- 如何在 PHP 的 HTML 页面中动态更改登录和注销链接
- 如何在php中进行自动注销
- php注销重定向头中断代码
- 如何在php中的数据库表中跟踪注销的用户
- 检测用户是否通过JS使用php注销(没有会话),如果是,则停止执行JS函数的其余部分
- Facebook连接:Can't使用PHP SDK+JS SDK注销
- 使用javascript注销php会话
- 使用PHP和JS SDK注销Facebook
- 当用户在php中的一个打开的选项卡中注销时,会自动注销所有打开的选项卡
- 注销windows身份验证IIS 8:使用php和javascript
- PHP或Javascript功能-强制注销facebook与1点击,如果可能的话
- PHP表单在注册后自动注销
- 从WordPress functions.php中注销jQuery
- 在php中处理登录后的会话id,以将菜单栏项从登录更改为注销
- 注销定时器php/javascript
- 我想使用php中的按钮注销