PHP:用户状态已登录或注销 - USER1 已登录,但用户 2 可以注销用户 1


PHP: User status logged in or out - USER1 logged in but USER2 can logout USER1

我有第三方应用程序,用户将在其中登录或注销,并且该应用程序将他们重定向到具有用户名和用户状态(cookie也使用用户名设置)的常规网站在URL字符串中,如下所示:

登录:http://www.domain.com/?username=XXXXXXXXXX&status=login

注销时:http://www.domain.com/?username=XXXXXXXXXX&status=logout

我的处理代码如下所示:

$username = "";
$status = "";
$username = $_REQUEST['username'];
$status = $_REQUEST['status'];
if(!empty($username) && !empty($status)){ 
    $_SESSION['username'] = $username;
    $_SESSION['status'] = $status;
}

稍后在主代码中显示欢迎状态和注销/登录按钮:

if ($_SESSION['status'] == "login" && strtolower($_SESSION['username']) == strtolower($_COOKIE['username'])){ $user_status = 'in'; }
if ($_SESSION['status'] == "logout" && strtolower($_SESSION['username']) == strtolower($_COOKIE['username'])){ $user_status = 'out'; }
if ($user_status == 'in'){ ?> Welcome <?php echo strtoupper($_SESSION['username']); ?> <a href="#" class="button">Logout</a>
<?php }
elseif ($user_status == 'out' || $user_status == '') { ?> <a href="#" class="button">Login</a></div><?php } ?>
例如,我已成功登录 USER1,重定向链接

http://www.domain.com/?username=USER1&status=login 并将 cookie 设置为 USER1,但是当我使用手动重定向链接 http://www.domain.com/?username=USER2&status=logout 时,尽管 URL 中的用户名是 USER2 而不是 USER1,但 USER1 还是注销。

我怎样才能防止这种情况?

第一个代码块中的if块有效地将登录用户和状态更改为URL中的任何内容。这允许任何人以其他人的身份登录或注销。

然后,由于在第二个代码块中不满足前两个if条件,因此不会设置$user_status。所以,$user_status == null == ''.(这是您应该使用 === 而不是 == 的原因之一。因此,该页面显示登录链接。