2012-04-13 195 views
-1

我做到這一點,以便用戶可以在登錄表單上檢查'記住我',它會設置cookie。現在,如果他們註銷它指示他們logout.php和cookies應該被刪除。這一切工作,除了我得到這些錯誤消息。「未定義索引」錯誤

說明:未定義指數:用戶名在C:\ XAMMP \ htdocs中\礦\ logout.php第6行

說明:未定義指數:口令在C:\ XAMMP \ htdocs中\在線礦山\ logout.php 7

我對logout.php代碼是

<?php 

session_start(); 

if (isset($_SESSION['username'])) { 
    setcookie('username', $_POST['username'], false, '/'); 
    setcookie('password', $_POST['password'], false, '/'); 
    session_destroy(); 
    echo "You've benn logged out. <a href='index.php'>Click here</a> to return."; 
} else { 
    die ('You are not logged in!'); 
} 
+0

使用'false'作爲第三個參數不會清除cookie,它會被註冊爲'0',這會使cookie直播到會話結束。過去使用一段時間,例如'時間() - 3600'。 – kba 2012-04-13 01:52:38

回答

0

只要使用isset($_POST['username'])?$_POST['username']:''代替$_POST['username']

而且isset($_POST['password'])?$_POST['password']:'',而不是$_POST['password']


參見: Ternary Operator

0

如果您的用戶要註銷,這是不可能的,他們還提交了用戶名或密碼註銷頁面,所以$_POST['username']$_POST['password']將是空的,因此你得到的錯誤。

但是,您不需要知道值(實際用戶名或密碼)以取消設置cookie,您只需要知道密鑰(字面意思是「用戶名」和「密碼」)即可。

<?php 
session_start(); 
setcookie('username', '', time()-3600, '/'); 
setcookie('password', '', time()-3600, '/'); 
session_write_close(); 
header("Location: /"); 
?> 

這會將它們註銷並重定向到您的首頁。

+1

這不會清除他的cookies,這是他提到的驗證登錄用戶的方法 – Lock 2012-04-13 01:18:13

+0

@Lock你是對的。我修好了它。 – kba 2012-04-13 01:35:25

-1

這是因爲超全球的$_POST未獲得usernamepassword變量。

我很想知道,當你從index.php鏈接到logout.php時,你不會發送到logout.php(因此這個調用不會有POST變量)。

你需要做的是保存在您的會話的用戶名和密碼(或永久存儲其他形式的):在session_start後

的index.php();

if (isset($_POST['username']) && isset($_POST['password'])) { 
    $_SESSION['username'] = $_POST['username']; 
    $_SESSION['password'] = $_POST['password']; 
} 

然後在logout.php您可以通過使用超全局$_SESSION代替$_POST清除這些值。

順便說一下,我不知道你爲什麼要將用戶名和密碼設置爲cookie,但這不是問題的關鍵。