2012-05-06 11 views
0

私はPHPの初心者で、ログインにクッキーを使うことを勉強しています。私の問題が何であるかを確認するために私のコードをチェックしてください、またはこの問題を解決する方法を教えてください。初めての読書ではPHPのクッキーが動作しません

初めてページを開くと、クッキーは機能しません。私はそのリンクを開くために繰り返したときに動作します。私は、関数を使用した後しかし、私はまだそれを動作させることができなかった含まれ、ヘッダコードの一つは、次のとおりです。

一つのコード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回目にクッキーのデータを見ることができます。いくつかのウェブサイトからは、同じページでクッキーが読み取られないと言われています。

私は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); 
?> 

は、事前に答えるためにありがとうございました!

ミシェル

+0

PHPのスーパーグローバルは、スクリプトの起動時に設定し、PHPで再びタッチされることはありません。スーパーグローバルを変更するスクリプト内の操作は、スクリプトが実行される次の時間にのみ表示されます。 –

+0

'pwd'にはパスワードが保存されていますか? –

+0

@Marc B: – zerkms

答えて

3

setcookieのみクライアントに送信されているヘッダを設定します。スーパーグローバルを変更しても$_COOKIEにはなりません。一方で

から$_COOKIEはクッキーで充填され、最初のステップで、だから、クライアントから

を送った - クライアントがまだそれを送信していないので、あなたはsetcookieでクッキーを設定し、$_COOKIEには何もありません、次の要求時にのみ行われます。

そして、あなたが望むものをやって、というよりも、手動で

PSを$_COOKIEを変更する方法はありません:

+0

あまりにも漠然としています!私はセッションを試みます。 – Michelle

2

与える答えをzerkmsクッキーにユーザーのパスワードを置くことは悪い考えですが、私だけあらためて表明したい:

  1. クッキーは、彼らはアイデンティティと認証処理に使用されることから、その悪評を得るなど、ユーザーのテーマの好みや優先スタートページなどの情報のビットを格納するためには悪くないです。そこには基本的に "isAdmin = 0"というユーザーアクセスを制御するためのクッキーがあります。 非常にで、それをisAdmin=1に変更して、フィールドの日があります。あなたはPHPを初めて使い慣れたので、セッションについて学ぶ時間を取ってみましょう。

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

  3. クッキー名を取得するために$_REQUESTを使用しているため、クッキーを確認する必要はありません(そうしないと、正しく設定するデータがありません)。だから、このルートを行く考える:彼らはクッキーをクリアした場合

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

これはまたなど、

を助けるだろう。しかし、実際に、より安全なルートがある:

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全体があります。

+0

はどうもありがとうございましたあなたの助けをありがとうございました「スーパーグローバルを変更するスクリプト内のあなたは何が唯一のスクリプトが実行される次回表示されますが、」---それは – Michelle

0

回避策としては、格納されたデータへのアクセス権を持っているクッキーを確認した後に場所を()を使用することができます。

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

関連する問題