2014-09-30 116 views
0

我正在開發一個用戶必須先登錄的網站,然後他們才能訪問他們的個人資料。但我不知道如何限制用戶通過在地址欄中鍵入sitename.com/profile.php來直接訪問配置文件頁面。我碰到這個代碼來了,而在Stack Overflow上搜索 這是我的login.php腳本限制訪問特定頁面

if(!empty($row['username']) AND !empty($row['password'])) 
{ 
    $_SESSION['login'] = true; 
    $_SESSION['username'] = $row['username']; 
    echo '<script>window.location = "profile.php"</script>'; 
} 

現在在profile.php頂部我已經把這段代碼

<?php 
session_start(); 
if (!$_SESSION['login']){ 
echo '<script>window.location = "index.html"</script>'; 
} 
?> 

的用戶仍然可以訪問通過直接輸入URL來配置profile.php。我究竟做錯了什麼?

+0

不要使用'回聲'';'它會導致包含整個網頁的瀏覽器往返,只是爲了讓瀏覽器從服務器請求另一個頁面而忽略它,使用'header('Location: profile.php在'login.php'形式頂部的‘命令爲好;');退出;' – RiggsFolly 2014-09-30 03:19:21

+0

由於它的工作,如果我不鍵入時退出;到底 – 2014-09-30 03:27:01

+0

添加了’在session_start()。一旦你開始使用會話,你必須在應用程序的EVERY頁面頂部添加'session_start();'來維護會話。 – RiggsFolly 2014-09-30 03:31:29

回答

0

您需要一個層次結構,然後需要確定要允許哪些級別的權限才能查看頁面。下面是權限的例子列表...

10 - 管理員

9 - 站長

8 - 助理站長

7 - 主持人

6 - 高級會員

5 - 會員

4 - 懲罰會員

3 - 已註冊但郵件未驗證會員

2 - 當有人寄存器設置禁止帳戶

所以例如 - 人類訪客

1 - 搜索引擎

0他們的賬戶到第3級,一旦他們驗證了他們的電子郵件地址,你將他們的賬戶級別(數據庫和會話)提高到5.如果你正在編寫軟件,你會在這個規模上獲得10的權限。

您想要爲會話變量(例如$_SESSION['user_permission'])分配權限(並使用前綴user_來獲取您需要的其他變量)。當你需要檢查你的權限必須使用isset(),這裏有一個例子...

<?php 
if (isset($_SESSION['user_permission']) && $_SESSION['user_permission']>=5) 
{ 
echo '<p>Member-only content visible here.</p>'; 
} 
else if (isset($_SESSION['user_permission'])) 
{ 
echo '<p>Stop causing trouble and you would be able to see this page.</p>'; 
} 
else 
{ 
echo '<p>Please register a new account.</p>'; 
} 
?> 

當使用isset()請確保您有正確的號碼括號,常犯的錯誤大家做。如果你不使用isset()然後黑客就可以衡量的錯誤信息找到你的代碼的弱點,所以總是檢查的東西,而不是假定它們的存在。

此外,您不需要重定向人員,只需讓PHP爲客戶端開始的頁面提取內容,這就是我是新手,我有很酷的想法階段我們都經歷過,當你意識到你過於複雜的事情時,你會掌握這些概念。例如在我的博客/編輯鏈接纔會出現,如果我或其他管理員/網站管理員的登錄,無需重新創建整個頁面只是權限所有的時候,雖然也有一些情況是一樣非常明顯在這種情況下,您希望儘早檢查權限並確保提供正確的HTTP錯誤代碼。

最後我已經從未發現PHP的empty()是有用的,它可能只與某些類型的數據的工作,而不是我將測試如果($something=='')例如,

+0

非常優雅,但**主要是殺死**實際上被問到的問題! – RiggsFolly 2014-09-30 03:40:39

+0

@RiggsFolly如果它可以幫助他們獲得更好的洞察力,寫出更好的代碼,遲早它會意味着更少的麻煩試圖找出這一切......然後還有所有其他人誰問同樣的問題,並最終閱讀本。對某些人來說這看起來有些過火,最終可能爲他人節省數百小時。 – John 2014-09-30 03:44:42

0

考慮到您使用的是Apache配置,請嘗試此操作。我用過「localhost」。替換您的域名。

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC] 
RewriteRule \.(php)$ - [F] 

您可以通過在RewriteRule中使用以下OR條件來擴展文件限制。例如。限制JPG訪問以及PHP。

RewriteRule \.(php|jpg)$ - [F] 

希望這會有所幫助。

+0

一個簡單的解釋這哪裏是Apache的配置文件 – 2014-09-30 03:16:22

+0

這是如何相關的問題???? – RiggsFolly 2014-09-30 03:17:06

+0

真的是裏格斯?正確閱讀他的問題。這是「如何限制用戶通過在地址欄中輸入sitename.com/profile.php來直接訪問個人資料頁面?」。 – 2014-09-30 03:21:12