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

时间:2015-01-23 03:23:21

标签: php

我有第三方应用程序,用户将要登录或注销,并且该应用程序将其重定向到常规网站,其中包含用户名和用户状态(也使用用户名设置cookie),其中包含以下内容:

登录: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。

我该如何预防这种情况?

1 个答案:

答案 0 :(得分:1)

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

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