2011-03-14 139 views
3

我有一個登錄頁面,一旦用戶成功登錄,它就會回覆到他們個人頁面的鏈接。當該頁面加載時,我希望它檢查用戶是否有權訪問它,以便有人不嘗試在URL中輸入www.mywebsite.com/bob.php。我試圖使用cookie來發送用戶信息,但是我意識到在html寫入頁面後您不能使用cookie。有誰知道有效的方式來做到這一點也很簡單嗎?用戶登錄感謝會話ID和PHP中的變量

+2

爲什麼你不在會話中存儲該信息? – Gumbo 2011-03-14 18:49:06

+0

在配置文件頁面的頂部,根據用戶配置文件的信息檢查會話變量。例如($ _SESSION ['logginInUserID'] == $ profileUserID){/ * success * /} else {header('Location:http://mysite.com/'); '? – 2011-03-14 18:50:27

+0

爲什麼不動態生成「個人頁面」,而不是爲每個用戶都有一個唯一的文件? – drudge 2011-03-14 18:52:15

回答

4

後,轉讓其ID添加到會話變量:

<?php 
session_start(); 
$_SESSION["userid"] = $userid; 
?> 

在受保護的頁面,檢查用戶是否有$ _SESSION [「用戶id」]變量設置:

<?php 
session_start(); 
if (isset($_SESSION["userid"])) { 
    //show page 
}else{ 
    echo "No rights"; 
} 
?> 
+0

這不會允許某人在登錄後訪問所有個人頁面嗎? – 2011-03-14 18:59:41

+1

明智地檢查'if($ _SESSION ['userid'] == $ userid){/ * show page * /}'; – drudge 2011-03-14 19:00:04

+0

哦,是的。我認爲這個人意味着它就像一個個人資料頁面,只有登錄用戶才能看到彼此。如果是每個用戶,那麼是的 - 絕對要仔細檢查用戶是否正在檢查他自己的頁面。 – arnehehe 2011-03-14 19:01:11

1

確實,當輸出已經發送到瀏覽器時,您無法設置cookie。一個有用的技巧是使用output buffering。基本上,您通過致電ob_start()開始您的代碼,並以ob_end_flush()結束。現在,您可以在代碼中設置Cookie(以及任何HTML標頭)。

+0

沒錯。這樣的代碼將不會打印出來,直到你沖洗或清理它 – 2011-03-16 02:26:23