1

私は初心者の PHP プログラマーで、Cookie を設定できません。

このエラーが発生し続けます:

Notice: 未定義のインデックス: user in D:\XAMPP\htdocs\Bank\verify.php 行 28

注意: 未定義のインデックス: 28 行目の D:\XAMPP\htdocs\Bank\verify.php を渡します

$_POST['user']コードでは、フォームからの値を使用して Cookie を設定し、$_POST['pass']それを印刷していますが、機能しません。

setcookie("user",$_POST['user'],3600);
setcookie("pass",$_POST['pass'],3600);
echo $_COOKIE["user"] . " " . $_COOKIE["pass"];  // This is line 28

そして、ここに私のフォームがあります:

<form action="verify.php" method="post">
    Username: <input name="user" /><br />
    Password: <input name="pass" type="password" /><br />
    <input type="submit" value="Submit" />
</form>

なぜこれが起こるのか知っている人はいますか?助けてください。

ありがとう。

4

4 に答える 4

1

次回ページにアクセスする際に Cookie が使用されます。したがって、3 つの一般的な解決策があります。 1. Cookie に保存し、最初は COOKIE の代わりに POST 変数をエコーするだけです。コードは次のようになります。

setcookie('user', $_POST['user'], time()+3600); // notice time() function
setcookie('pass', $_POST['pass'], time()+3600); // you cant use absolute value here

if (!isset($_COOKIE['user'])) echo $_POST['user'] . ' ' . $_POST['pass'];
    else echo $_COOKIE['user'] . ' ' . $_COOKIE['pass'];

、しかし、本当にパスワードをCookieに保存したい場合(非常に悪い考えです)、少なくともそれをハッシュしてください。ハッシュを使用したコードは次のようになります。

setcookie('pass', hash(whirlpool/*algorithm*/, $_POST['pass']/*text*/), time()+3600);

、次にパスワードを確認するときに、それをハッシュしてハッシュを比較します。


2.解決策はセッションですが、ブラウザを閉じるまでしか機能せず、セッション全体が消去されます。
3.おそらく最善の解決策は、ユーザーとパスワードをmySQLデータベースまたはサーバー側の.txtファイルに保存することです。それでも、ハッシュ化することを忘れないでください。データベースであっても、誰かがハッキングを使用してこれらの情報を盗むことができるからです。あなたのウェブは安全だと思っていても、心配するよりは安全です。
それがあなたの解決策です。簡単なメモ: 重要なものにパスワードを保存する場合は、常にハッシュ化してください。できればソルト付きハッシュを使用してください。インターネット上にはハッシュに関する記事がたくさんあります。このサイトを見てください: http://php.net/manual/en/faq.passwords.php

于 2013-08-08T15:05:19.167 に答える
0

同じリクエストで Cookie を送受信することはできません。ここにあなたが試すべき修正があります

if(isset($_POST['user']) && isset($_POST['pass'])){

setcookie("user",$_POST['user'],3600);
setcookie("pass",$_POST['pass'],3600);

header("location:".$_SERVER['PHP_SELF']);

}
if(isset($_COOKIE['user']) && isset($_COOKIE['user']))
{
echo $_COOKIE["user"] . " " . $_COOKIE["pass"];  // This is line 28

}

ただし、代わりにセッションを使用することをお勧めします。PHP_SESSIONを通過することから始めます

于 2013-08-08T14:15:19.120 に答える
0
setcookie();

次にブラウザーに応答を送信するときに、ブラウザーに Cookie を送信するように PHP に指示します。

$_COOKIE

ブラウザが PHP にリクエストを送信したときにブラウザから受け取った Cookie です。

同じリクエストで設定と受信を試みています

編集

PS 学習しているだけだとは思いますが、ユーザー ID とパスワードを Cookie に保存して、インターネット上の誰もが見ることができるようにする予定がないことを願っています。

于 2013-08-08T12:46:22.000 に答える
0

$_COOKIEリクエストで (Web クライアントから) スクリプトに渡された Cookie のみが対象であり、クライアントに送信されるようにスクリプトで設定した Cookie は対象ではありません。したがって、「ユーザー」と「パス」は、クライアントに送信し、クライアントがそれらを返送するまで含ま$_COOKIEません。

また、Cookie にパスワードを設定していないことを教えてくださいCookie はリモートで安全ではないため、これは非常に悪いセキュリティです。通常の手法では、Web サーバーにのみデータを保存する PHP セッションを作成し、セッション ID を Cookie に入れるだけです。PHP のセッションについては、php オンライン マニュアルを参照してください。

于 2013-08-08T12:47:45.453 に答える