如果用户在未登录时尝试在我的系统中执行某个功能,我会尝试制作一些内容,它会弹出一条消息,说他们不能这样做,因为他们没有登录。他们是然后在按下确定后发送到登录界面。
如果他们直接输入网址,我也希望它将用户重定向回登录界面,但这次没有错误信息。
我有:
$components = explode('/', $url, 3) ;
if(!isset($_SESSION['loggedin']) && $components[0] != 'access' && $components[0] != 'login')
{
echo json_encode('{"error": 2000, "msg": "You must be logged in to do that."}') ;
return false ;
}
对于Ajax来说这很好,但是如果输入了url则无法工作。$ components [0]!='access'等只是在用户登录屏幕时停止执行此条件。< / p>
如果没有影响Ajax调用的标头位置,如何在用户访问禁用网址时回复错误消息,该怎么办呢?
答案 0 :(得分:0)
如果没有影响Ajax调用的标头位置,如何在用户访问禁用网址时回复错误消息,该怎么办呢?
有多种方法可以实现这一点,让我们在这里讨论两个:
首先,您可以检查HTTP引用,浏览器将链接到当前页面的页面的URL作为HTTP标头发送。
当用户点击表单/链接时,请查看http://foo.invalid/blah/?action=newfolder.php
的此(缩短的)HTTP请求。
Request URL:http://foo.invalid/blah/?action=newfolder.php
Request Method:POST
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Host:foo.invalid
Referer:http://foo.invalid/
您可以看到存在“Referer”字段,如果用户直接打开http://foo.invalid/blah/?action=newfolder.php
,则不会有referer字段。
<?php
if (empty($_SERVER['HTTP_REFERER'])) {
// Redirect to login (Referer empty)
} else {
// Show JSON warning (Referer not empty)
}
?>
但是,此解决方案不可靠,因为一些用户出于隐私原因禁用或伪造引用者。
更好的方法是发送自定义HTTP标头,请注意您只能向AJAX请求添加自定义HTTP标头。像JQuery这样的库已经为您添加了自定义标题。
var r = new XMLHttpRequest();
r.open('get', '/blah/?action=newfolder.php');
r.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
r.send(null);
现在请求将包含自定义X-Requested-With
标头,如果标头丢失,您可以通过输入URL来假设页面已打开。
<?php
if (empty($_SERVER['HTTP_X_REQUESTED_WITH'])) {
// Redirect to login (X-Requested-With empty)
} else {
// Show JSON warning (X-Requested-With not empty)
}
?>
答案 1 :(得分:-1)
$UserName = "username";
$PassWord = "password";
if ($_SERVER['PHP_AUTH_USER'] != $UserName || $_SERVER['PHP_AUTH_PW'] != $PassWord) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.1 401 Unauthorized');
die('Your username and password is incorrect');
// or you can redirect user if username or password is incorrect
header("Location:"your redirecting url);
}
请使用此代码,它可能对您有帮助....
要了解有关PHP身份验证的更多信息,请参阅以下链接: