2012-04-13 24 views
-1

ユーザがログインフォームで「私を覚えている」をチェックしてクッキーを設定できるようにしました。ログアウトすると、logout.phpに送られ、クッキーは削除されます。私はこれらのエラーメッセージを得る以外はすべて動作します。「未定義のインデックス」エラー

お知らせ:未定義のインデックス: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

第3のパラメータとして「false」を使用すると、クッキーがクリアされません。セッションの終了時までクッキーを有効にする「0」として登録されます。過去の時間を使用します(例: 'time() - 3600'。 – kba

答えて

0

だけ0を使用しています代わりに$_POST['username']

そしてisset($_POST['password'])?$_POST['password']:''代わりの$_POST['password']


の参照: Ternary Operator

0

ユーザーがログアウトしたい場合は、それはそう、彼らはまた、ログアウトページに、ユーザー名やパスワードを提出したとは考えにくいのです$_POST['username']$_POST['password']は空になるため、エラーが発生します。

しかし、クッキーを設定解除するために値(実際のユーザー名またはパスワード)を知る必要はありません。キー(文字通り「ユーザー名」と「パスワード」)を知る必要があります。

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

これをログアウトしてフロントページにリダイレクトします。

+1

これは彼のクッキーをクリアしません。これは、ログインしたユーザーを確認する方法です。 – Lock

+0

@Lockあなたは正しいです。それを私が直した。 – kba

-1

これは、$_POSTスーパーグローバルにusernamepasswordという変数がないためです。

index.phpからlogout.phpにリンクすると、logout.phpにはPOSTされていないので、この呼び出しにはPOST変数はありません。

何をする必要がユーザー名とパスワードのセッションで(または永続ストレージの他の形式)を保存している:にsession_start後

のindex.php();

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

次にlogout.phpにあなたの代わりに$_POSTのスーパーグローバル$_SESSIONを使用して、それらの値をクリアすることができるかもしれません。

ちなみに、私はあなたがなぜユーザー名とパスワードをクッキーとして設定するのか本当に分かりませんが、それはあなたの質問のポイントの外にあります。

関連する問題