1

我正在尝试做一些事情,如果用户在未登录时尝试在我的系统中执行某个功能,它会弹出一条消息说他们无法执行此操作,因为他们没有登录。然后将它们发送到按确定时的登录屏幕。

如果用户直接输入 url,我还希望它能够将用户重定向回登录屏幕,但这次没有错误消息。

我有:

$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' 等只是停止执行此条件。

如何在没有影响 Ajax 调用的标头位置的情况下执行此操作,并且在用户访问禁止的 url 时不简单地回显错误消息?

4

2 回答 2

0

如何在没有影响 Ajax 调用的标头位置的情况下执行此操作,并且在用户访问禁止的 url 时不简单地回显错误消息?

有多种方法可以实现这一点,让我们在这里讨论两种:

检查推荐人

首先,您可以检查 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 标头字段

更好的方法是发送自定义 HTTP 标头,请注意您只能将自定义 HTTP 标头添加到 AJAX 请求。JQuery等一些库已经为您添加了自定义标头。

源 ( XMLHttpRequest )

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)
}
?>
于 2013-01-03T12:52:13.007 回答
-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 中身份验证的更多信息,请参见以下链接:

http://php.net/manual/features.http-auth.php

于 2013-01-03T07:31:30.783 回答