2012-04-01 10 views
0

私はphpでログインシステムを作っています。正しい情報を提出すると、cookieが設定されます。フォームアクションは同じページに送信されますが、その上にはイムネットのCookieの確認がありますが、設定後にCookieが更新される必要があるため、別のページを更新してCookieがあることがわかります。php:クッキーを設定して取得していますか?

どうすればよいですか?ここに私のコードです(私は、システムの作業を取得する際のユーザ名とパスワードだけのプレースホルダとして「admin」です。私は、データベースから値を引き出します。)

<?php 
if(isset($_COOKIE['user'])) 
{ 
echo "Hello, administrator.<br />"; 
echo "<a href=?logout=yes>logout</a>"; 
if(isset($_GET['logout'])) 
{ 
    setcookie("user", $_POST['username'], time() - 3600); 
} 
} 
else 
{ 
if (isset($_POST['submit'])) 
{ 
    if (($_POST['username']=="admin")&&($_POST['password']=="admin")) 
    { 
      setcookie("user", $_POST['username'], time() + 3600); 
    } 
    else 
    { 
     echo "empty field or wrong user/pass."; 
    } 
} 
else 
{ 
    echo "nothing submitted. show form."; 
} 
} 
?> 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
<table border="0"> 
<tr><td colspan=2><h1>Login</h1></td></tr> 
<tr><td>Username:</td><td> 
<input type="text" name="username" maxlength="40"> 
</td></tr> 
<tr><td>Password:</td><td> 
<input type="password" name="password" maxlength="50"> 
</td></tr> 
<tr><td colspan="2" align="right"> 
<input type="submit" name="submit" value="Login"> 
</td></tr> 
</table> 
</form> 
+1

誰もがこのアプローチの潜在的な管理者であることを認識していますか?誰でも自分のクライアントに 'user'という名前のクッキーを設定することができます。 –

+0

Ferhad、どのような方法をお勧めしますか?気になります。 – David

+0

セッションIDまたはハッシュを保存するために、すべてのユーザーデータとCookieにセッションを使用します。 –

答えて

0
$loggedin = false; 
if(isset($_POST['submit'])) { 
// Do login checking and set cookies 
$loggedin = true; // if the case 
}else if(isset($_COOKIE['username']) && isset($_COOKIE['password'])) { 
    // Check if valid login 
    $loggedin = true; // if the case 
}else{ 
    // They are not logged in. 
} 

はその後にveriable $のLOGGEDINを使用します彼らがログインしているかどうかを確認してください。これを処理するためにユーザークラスを作成することをお勧めします。したがって、ファイル内で同じコードを繰り返し使用し続けますか?

0

あなたはすなわち、クッキーを設定するために、独自の機能を行うことができます。

function my_setcookie($name,$value,$expire){ 
    $_COOKIE[$name] = $value; 
    return setcookie($name,$value,$expire); 
} 

しかし、良いアイデアが成功した「POST」リクエスト後にユーザーをリダイレクトすることですので、ページが更新される場合、ブラウザは文句はありませんPOSTデータを再送します。

1

カスタムクッキーを絶対に使用する必要がある場合を除き、代わりに$ _SESSIONグローバルを使用することをお勧めします。 $ _SESSIONデータは、設定するとすぐに使用できます。しかし、その重要な特徴は、データがクライアントに格納されていないことです。つまり、ユーザーが決してデータにアクセスできないということです。だからあなたのログインシステムをハックするのは難しいです。他の人が指摘しているように、Cookieを使用すると、誰でもデータを読み込んで編集できます!

session_start(); 

if (isset($_GET['logout'])) 
{ 
    unset($_SESSION['username']); 
} 
if ($_SESSION['username'] == 'admin') 
{ 
    echo "hello admin!"; 
} 
else if (($_POST['username']=="admin")&&($_POST['password']=="admin")) 
{ 
    $_SESSION['username'] = $_POST['username']; 
} 

$ _SESSIONグローバルを使用するには、(任意のデータを送信する前に)あなたのスクリプトの先頭にsession_start()を配置する必要があります。同時にリダイレクトの問題を解決するはずです。シーンの後ろでは、$ _SESSIONは小さなクッキーを使用しますが、実際にはそれについて考える必要はありません。小さなIDだけが含まれています。セッションの

詳しく

http://www.php.net/manual/en/book.session.php

PS:正直に言うと、私はまだここにリダイレクトを使用します。フォームをPOSTして戻るボタンを押すと、ブラウザはデータをもう一度送って迷惑をかけるように頼みます。 header("Location: " . $newUrl);でリダイレクトを使用して、その迷惑を除去します。しかしちょうど私の2セント。

関連する問題