我似乎无法找到这个问题的直截了当的答案。有没有办法可以强制登录用户注销?我的登录系统基本上只依赖于包含用户唯一ID(存储在mysql数据库中)的会话。所以基本上只是......
if (isset($_SESSION['user_id'])) {
echo "You're logged in!";
} else {
echo "You need to login!";
}
但是,假设我想要禁止这个用户,我可以将其状态更改为在我的数据库中禁用,但在用户注销并尝试重新登录之前,这不会做任何事情......所以,我该怎么做强制该用户注销?最好不要每次检查他们查看页面是否他们的状态已被切换为“禁止”,因为这似乎是我服务器上的不必要的压力。感谢任何帮助,谢谢。
答案 0 :(得分:6)
您需要在每次加载页面时进行检查,或者可能按设定的时间间隔查看Ajax调用以从数据库检查其状态。
然后您可以使用session_destroy();
结束会话。这将破坏他们的整个会话。
否则,您可以使用unset($_SESSION['user_id']);
取消设置单个会话变量
答案 1 :(得分:5)
最好不检查每一次他们查看页面是否他们的状态已被切换为“禁止”,因为这似乎是我服务器上不必要的压力。
在每次加载页面时从数据库加载用户,而不是在会话中存储用户的副本,这是一个非常合理的解决方案。它还可以防止用户与数据库中的副本不同步(例如,您可以更改用户的属性或权限,而无需注销并重新登录)。
答案 2 :(得分:1)
尝试将其放在每一页上......
if (isset($_SESSION['user_id'])) {
$sql = "SELECT from tbl where status='banned' and user_id=$_SESSION['user_id'] ";
$query = mysql_query($sql);
if(!empty(mysql_num_rows($query))){ // found the banned user
//redirect to logout or
//session_destroy();
}
} else {
echo "You need to login!";
}
如果用户仍然登录...检查他/她的状态是否被禁止...如果被禁止..然后注销
答案 3 :(得分:0)
你可以取消它。
unset($_SESSION['user_id'])
答案 4 :(得分:0)
您可以使用Custom Session Handlers这样您可以完全控制会话数据在服务器上的存储位置和方式。
因此,您可以将特定用户的会话数据存储在名为<user_id>.session
的文件中。然后,要注销用户,只需删除该文件。
答案 5 :(得分:0)
间隔中的Ajax调用会给服务器带来额外的负担。如果您希望对您的操作进行实时响应(例如,当您从系统后端禁止用户时,用户将被正确注销),那么您应该查看Server Push
之类的内容。
当用户浏览您的网站时,想法是在服务器与浏览器之间保持隧道打开,以便您也可以从服务器端与它们进行通信。如果您希望禁止它们,请按下注销请求和页面中的进程(即通过取消设置强制注销)。
答案 6 :(得分:0)
这对我有用,我正在使用pHP 5.4 包括'connect.php';
session_start();
if(session_destroy())
{
header("Location: login.php");
}
答案 7 :(得分:0)
您可以使用session_save_path()
查找PHP保存会话文件的路径,然后使用unlink()
删除它们。
删除存储在服务器中的会话文件后,客户端PHPSESSID
cookie将不再有效进行身份验证,用户将自动退出应用程序。
使用此方法时请务必小心,如果有问题的路径是全局/ tmp目录!除了PHP之外,还有其他进程存储临时数据。如果PHP为会话数据留出了自己的目录,那么它应该是相当安全的。
答案 8 :(得分:-1)
基于安全性,我认为有几种方法可以做到最好: 注意:这真的很粗......我知道语法错了,它只是为了让你有个主意。
$con = mysql_connect("localhost","sampleuser","samplepass");
if (!$con)
{
$error = "Could not connect to server";
}
mysql_select_db("sampledb", $con);
$result = mysql_query("SELECT * FROM `sampletable` WHERE `username`='".$_SESSION['user_id']."'");
$userdeets = mysql_fetch_array($result);
if($_SESSION['sessionvalue'] != $userdeets['sessionvalue'])
{
session_destroy();
Header('Location: logout.php');
}
else
{
$result2 = mysql_query("UPDATE `sessionvalue` WHERE `username`='".$_SESSION['user_id']."' SET `sessionvalue` = RANDOMVALUE''");
$sesval = mysql_fetch_array($result2);
$_SESSION['sessionvalue'] = $seshval
}
现在我知道这不是代码,但实质上你需要做的是保证安全并具备这种能力:
如果要禁止用户,可以将DB中的会话值设置为&#34; BANNED&#34;等值。此值不允许他们登录。通过这种方式,您可以通过简单的Web表单控制用户,还可以非常容易地生成禁止用户列表等等。我希望我有更多时间来解释它,我希望这会有所帮助。