2012-06-07 1 views
0

У меня есть этот простой сценарий входа:Jquery/PHP - Запретить пользователю от просмотра заблокированного контента

$.ajax({ 
     type: 'POST', 
     url: 'authorize.php', 
     data: { username: user, password: pass }, 
     dataType: 'json', 
     success: function(data) { 
      if (data.status == "loggedIn") { 
       //Logged in 
      } else { 
       //Not logged in 
      } 
     } 
    }); 

Где //Logged in это, как я должен позвонить страницу, которая требует логин? Я мог бы просто $.load страницу, но тогда, какова была точка проверки входа, когда пользователь мог просто просмотреть этот файл в первую очередь?

+0

Надеюсь, вы включите включенный файл, если пользователь вошел в систему. Если нет, весь ваш логин бесполезен. – Oliver

+1

Я бы предложил использовать ['PHP Sessions'] (http://www.php.net/manual/en/book.session.php) на всех этих страницах. Сделайте проверку на странице, которую вы собираетесь на '$ .load', чтобы пользователь действительно зарегистрировался и установил, что пользователь выполнил вход на странице' authorize.php' в случае успеха. –

+0

Я бы принял это как ответ Аарон. – Norse

ответ

1

Я предлагаю использовать PHP Sessions на всех этих страницах. Сделайте проверку на странице, на которой вы собираетесь: $.load, что пользователь действительно вошел в систему и установил, что пользователь выполнил вход на странице authorize.php в случае успеха.

Таким образом, если пользователь смотрит на источник страницы и видит, что вы загружаете, но когда они пытаются получить доступ к этой странице, он ничего не сделает, потому что вы проверяете, были ли они зарегистрированы в уже.

1

Это вопрос презентации, вы можете просто загрузить div в другой файл, вам не нужно загружать все это.

Я использую ajax для входа и $ .load, чтобы «принести» div, который у меня есть в файле шаблона. Это просто потому, что вам становится легче, когда вам нужно изменить дизайн.

Помните, что разделение работы на отдельные «части» облегчает вам изменение вещей. Представьте, что у вас одинаковое окно входа на 20 отдельных шаблонов. Если вы измените один, вы должны изменить еще 19.

1

Вы не можете запретить пользователю делать что-либо с JavaScript (JQuery), так как на стороне клиента и легко отключить/изменено т.д.

Что вы можете сделать, это просто $.load страница, как вы говорите, но также иметь проверку против сеанса на загруженной странице, которая проверяет фактический вход в систему перед отправкой содержимого. Вам нужно будет установить некоторую переменную в сеансе как часть authorize.php, чтобы указать успешный вход в систему.

1

Чтобы предотвратить доступ к данным, вы должны изучить .htaccess и Apache's mod_rewrite. Всякий раз, когда пользователь запрашивает кусок конфиденциальных данных, вы незримо вызываете страницу PHP, которая затем будет обслуживать либо запрошенные данные, либо 403 Forbidden.

Пример:

.htaccess

RewriteEngine On 
RewriteRule ^user-content/(.+) display_content.php?file=$1 

Затем любые файлы, которые будут доступны в пользовательском содержании будет перенаправлен через display_content.php. Вы также можете использовать этот файл .htaccess, чтобы предотвратить хотлинкинг, отказавшись отображать ресурс, если есть реферер.

display_content.php

<?php 
if (isLoggedIn($_COOKIE["username"], $_COOKIE["password"]) && isset($_GET["file"])) { 
    if (mimeTypeOk($_GET["file"]) { // Implementation not shown 
     readfile($_GET["file"]); 
     exit(); 
    } 
} 
header("403 Forbidden"); 
?> 
0

Для того, чтобы сделать это наиболее безопасный путь, вы будете иметь, чтобы использовать как JQuery, как на стороне клиента, как и PHP, как на стороне сервера, способ проверяя, вошел ли пользователь в систему.Вам не нужно загружать всю страницу с JQuery, просто используйте следующий код для загрузки только Div части:

$("#load_dom").click(function(){ 
$("#result") 
    .html(ajax_load) 
    .load(loadUrl + " #picture"); 
}); 

Тогда, в качестве меры безопасности, использовать PHP, чтобы ограничить доступ к странице, проверяя $ _SESSION vars вот так:

if (!isset($_SESSION['userid'])) { 
    // user is logged in 
} else { 
    // user is not logged in 
    die("You are not logged in."); 
}