我有第三方应用程序,用户将要登录或注销,并且该应用程序将其重定向到常规网站,其中包含用户名和用户状态(也使用用户名设置cookie),其中包含以下内容:/ p>
登录: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。
我该如何预防这种情况?
答案 0 :(得分:1)
第一个代码块中的if
块有效地将登录用户和状态更改为URL中的任何内容。这样任何人都可以像其他人一样登录或注销。
然后,因为在第二个代码块中没有满足前两个if
条件,$user_status
没有设置。所以,$user_status == null == ''
。 (这是您应该使用===
而不是==
的一个原因。)因此,该页面显示了登录链接。