0

PHPの初心者で、ログインにCookieを使用することを勉強しています。私のコードをチェックして、私の問題を確認するか、この問題を解決する方法を教えてください。

初めてページを開くと、Cookie が機能しません。そのリンクを開くことを繰り返したときに機能します。ただし、関数インクルードとヘッダーを使用しても機能しませんでした。コードの1つは次のとおりです。

1 つのコード cookie.php は次のとおりです。

<?php
setcookie("cookiename",$_REQUEST['name']);
if(isset($_COOKIE['cookiename'])){
$cookieSet = ' The Cookie is ' .  $_COOKIE['cookiename'];
} else {
$cookieset = ' No Cookie has been set';
}
setcookie("cookiepwd",$_REQUEST['pwd']);
print_r($_COOKIE);
?>

このコードを初めて実行すると、何も表示されません。2 回目に Cookie データを確認できます。一部の Web サイトから、Cookie は同じページで読み取られないと言われています。

そのため、print_r($_COOKIE) を 2 番目の php ファイルに移動し、上記のファイルに関数 include() または header() を追加しましたが、どちらも機能しません。

Cookie2.php:

<?php
setcookie("cookiename",$_REQUEST['name']);
if(isset($_COOKIE['cookiename'])){
$cookieSet = ' The Cookie is ' .  $_COOKIE['cookiename'];
} else {
$cookieset = ' No Cookie has been set';
}
setcookie("cookiepwd",$_REQUEST['pwd']);
include(‘printcookie.php’);
//or header("Location: printcookie.php")
?>

printcookie.php:

<?php
print_r($_COOKIE);
?>

早々にご回答いただき、誠にありがとうございました!

ミシェル

4

3 に答える 3

3

setcookieクライアントに送信されるヘッダーのみを設定します。$_COOKIEそれはスーパーグローバルを変えません。

一方、 -クライアントから$_COOKIE送信された Cookie でいっぱいです

したがって、最初のステップでは、Cookie を設定し、クライアントがまだ送信していないため、何も入れず、次のリクエストでのみ送信しますsetcookie$_COOKIE

$_COOKIEそして、手動で変更するのではなく、あなたが望むことをする方法はありません

PS: ユーザーのパスワードを Cookie に入れるのは悪い考えです。

于 2012-05-06T06:03:14.833 に答える
2

zerkmsに答えを与えてください、しかし私はただ繰り返したいです:

  1. Cookieは、ユーザーのテーマ設定や優先スタートページなどの情報を保存するのに悪いことではありません。Cookieは、IDと認証の処理に使用されることで悪い担当者を取得します。ユーザーアクセスを制御するために基本的に「isAdmin=0」を持つCookieがあります。これを変更してフィールドデーを開催するのは非常に簡単です。isAdmin=1あなたはPHPに慣れていないので、セッションについて学ぶ時間を取ってください。セッションはまったく新しいものです。

  2. を使用してCookieを設定するsetcookieと、Cookie情報を含むHTTPヘッダーがブラウザに送信されます。その後、ブラウザはサーバーへの今後のリクエストでそのCookieを返します。グローバル変数は$_COOKIE、ブラウザからサーバーに渡されるCookie情報を保持します。

  3. を使用$_REQUESTしてCookie名を取得しているため、Cookieを確認する必要はありません(そうでない場合は、正しく設定するためのデータがありませんか?)。したがって、このルートを検討してください。

    if(!isset($_COOKIE['cookiename'])) {
          $name = $_POST['name']);
          setcookie("cookiename",$name);
     } else {
        $name = $_COOKIE['cookiename']);
     }
    
    echo "Welcome back $name!";
    

これは、Cookieなどをクリアする場合にも役立ちます。

しかし実際には、より安全なルートは次のとおりです。

session_start();
if(!isset($_SESSION['name'])){
    $_SESSION['name'] = $_POST['name']);
}
if(!isset($_SESSION['pwd'])){
    $_SESSION['pwd'] = $_POST['pwd']);
}

$name =  $_SESSION['name'];
$pwd = $_SESSION['pwd'];

そして、これでさえ、深刻なWebセキュリティのために眉をひそめます。そこでは、保存されたハッシュに対してパスワードをチェックし、他のグローバル変数を使用してセッションの整合性を確認して、パスワードを削除する必要があります。しかし、今ではそのためのStackExchange全体があります。

于 2012-05-06T06:23:15.393 に答える
0

回避策として、保存されたデータにアクセスできるように Cookie を確認した後に location() を使用できます。

ただし、何か (スクリプト内の改行や空白を含む) が既にブラウザーに送信されている場合、location() は失敗することに注意してください。

于 2015-10-20T07:13:49.127 に答える