2012-06-07 27 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的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增值稅這樣:

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