2013-08-31 79 views
1

我想從我的網站的「僅限會員」區域創建註銷/退出鏈接。所以我爲此創建了一個logout.php腳本,註銷鏈接將導航到,然後我使用標題重定向到index.php。我的問題是,如何通過簡單地輸入URL來阻止用戶導航到logout.php腳本?如何防止網址導航到網站上的管理頁面

對於這個問題,你如何防止這種情況發生?

對於澄清:

我希望用戶使用的退出鏈接ONLY即通過點擊註銷;而不是輸入註銷腳本的URL地址。

logout.php如下:

<?php 
session_start(); 
if (isset($_SESSION['user'])){ 
    unset($_SESSION); 
    session_destroy(); 
    header ('location: index.php'); 
} 

?> 
+1

通常,這是通過在您的PHP腳本或HTTP服務器中使用cookie和服務器端驗證來完成的。 – probablyup

+0

[教程: 使用PHP和MySQL的基本登錄驗證](http://www.phpro.org/tutorials/Basic-Login-Authentication-with-PHP-and-MySQL.html) – Itay

+0

我不知道我得到您。我沒有設置會話並銷燬它。這是logout.php腳本的一部分。這仍然不會阻止登錄用戶通過輸入url來導航到logout.php。 –

回答

0

您可以通過將logout.php設置爲POST頁面而不是普通的GET來停止該操作。這樣做的一種方式是將您的註銷鏈接更改爲實際提交表單,而不僅僅是正常的鏈接。然後在註銷頁面上,檢查表單在註銷之前是否真正提交。這意味着只要輸入網址,任何人都不會註銷,而用戶點擊該鏈接即可。

這方面的一個例子是讓你的HTML像

<form action="logout.php" method="post" name="logoutform"> 
<input type="hidden" name="logout" value="y"> 
<a href="javascript:document.forms['logoutform'].submit()">Log Out</a> 
</form> 

你可能要額外的CSS刪除表格樣式了。

在logout.php代碼可以是:

<?php 
if ($_POST["logout"] == "y") { 
    /* Getting here means they clicked the link, so log them out */ 

} 

?> 

不能在瀏覽器中鍵入logout.php阻止他們,但是這將確保他們只將實際註銷,當他們提交表單(即點擊註銷鏈接)。只需輸入URL即可獲得空白頁面。

+0

是的,這肯定會奏效。我希望我不必訴諸於提交按鈕。哈哈。謝謝。 –

+0

我認爲這是最可靠的方法,以確保他們只有在他們打算退出時纔會註銷。即使stackoverflow這樣工作 - 嘗試點擊http://stackoverflow.com/users/logout;) – mikel

+0

嗯,是的,這很有趣! –

0

我希望用戶使用的退出鏈接只註銷;而不是通過輸入註銷腳本的url地址。

真的不可能避免訪問者在瀏覽器中更改地址欄網址。沒有真正的方法來確定用戶如何訪問logout.php - 通過直接輸入網址或從網站上的頁面輸入。

我認爲你從錯誤的角度來看問題,但如果你真的想要做到這一點,我會建議使用session variable

+0

感謝您的幫助。我正在使用會話變量。這裏是logout.php腳本:<?php if(isset($ _ SESSION ['user'])){ \t unset($ _ SESSION) \t session_destroy(); \t header('location:index.php'); } ?> –