2016-08-11 15 views
0

ページのCookieを設定しても、ページを終了するとすぐにCookieが削除されます。ブラウザの設定がクッキーを維持するために設定されていると、この問題は、このPHPコードを他のウェブサイトでは発生しません:セッション終了時にPHP Cookieが削除されます

<!DOCTYPE html> 

<html> 
<title>Authentication cookie</title> 
<body> 

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 

Authentication code: <input type="text" name="authcode" value="<?php echo $_GET["authcode"]; ?>"> 
<input type="submit" name="submit" value="Submit"> 
</form><br> 



<?php 
$cookie_name = "authpi"; 
$cookie_value = $_POST["authcode"]; 
setcookie($cookie_name, $cookie_value, time() + (10 * 365 * 24 * 60 * 60), '/', '10.0.0.2'); // 86400 = 1 day 

?> 


<?php 
if(!isset($_COOKIE["authpi"])) { 
    echo "Authentication Cookie named '" . $cookie_name . "' is not set!"; 
     #//header("Location: http://www.google.at/"); 
} else { 
    echo "Authentication Cookie '" . $cookie_name . "' is set!<br>"; 
    echo "Your authentication code is: " . $_COOKIE[$cookie_name]; 
} 
?> 

<p><strong>Note:</strong> After setting the Cookie reload the page to make sure it works!</p> 
</body> 
</html> 

はなぜクッキーはページを残した後に除去されますか?

PS:クッキーの作成は問題ではありません。それはうまく動作します。

+0

ブラウザがページを離れた後、どのようにCookieが存在するかを確認しますか?そして、あなたは別のドメインに行くことを辞めるか、ページを離れてあなたのドメインにとどまるのですか? – BeetleJuice

+0

別のドメインにアクセスし、ページに再度アクセスすると、Cookieが存在しないことが示されます。 ページを離れて同じドメインの別のページに行くと、元に戻ってクッキーが存在しないと表示されます – cr78

+0

私の投稿に問題1のように聞こえます。あなたは、クッキーの作成は問題ではないと言いました。クッキーが適切に設定されていることをどのように確立しましたか? – BeetleJuice

答えて

0

クッキーは設定されません。

ヘッダーが送信された後にCookieを設定しようとしています。これを行うには、出力バッファーを使用する必要があります。つまり、ヘッダーをブラウザーに送る前にob_start();を使用する必要があります。 ob_start();について

より:Output Buffers PHP

簡単注:このコードは...混乱です。

(それは速いコーディングだったので、まだ乱雑)あなたのコードの例の作業

<?php 

    $cookie_name = "authpi"; 

    if(isset($_POST['submit'])) { 
     $cookie_value = $_POST["authcode"]; 
     $domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false; 

     setcookie($cookie_name, $cookie_value, time() + (10 * 365 * 24 * 60 * 60 * 60), '/', $domain); // 86400 = 1 day 
    } 
    if(!isset($_COOKIE["authpi"])) { 
     echo "Authentication Cookie named '" . $cookie_name . "' is not set!"; 
    } else { 
     echo "Authentication Cookie '" . $cookie_name . "' is set!<br>"; 
     echo "Your authentication code is: " . $_COOKIE[$cookie_name]; 
    } 


?> 

<!DOCTYPE html> 

<html> 
    <head> 
     <title>Authentication cookie</title> 
    </head> 
    <body> 

     <form method="post" action="<?=$_SERVER['PHP_SELF']?>"> 

      Authentication code: <input type="text" name="authcode" value="<?php echo $_GET["authcode"]; ?>"> 
      <input type="submit" name="submit" value="Submit"> 
     </form> 

     <br> 

     <p><strong>Note:</strong> After setting the Cookie reload the page to make sure it works!</p> 
    </body> 
</html> 
+0

多分私は間違っていますが、これを行うことであなたの方法でユーザーフォームの入力がクッキー値として設定されるとは思いませんか? – cr78

+0

PS:私のコードは本当に乱雑ですが、これはホームオートメーションシステムのちょっとした回避策であり、ネットワーク上の誰も制御できないようにしています。 – cr78

+0

@ cr78はい、ユーザーが入力した値としてCookieが設定されます。このページは、フォームが送信された後に 'POST'データを設定し、それを' action'にリダイレクトします。次に、「POST」データが使用される。 –

0

すでにブラウザにコンテンツを送信した後は、setcookie()またはHTTPヘッダーを変更する他の機能を使用することはできません。これらの機能を含むコードブロックの<?php(出力バッファリングを有効にしていない場合)の前には、何も(空白でなくても)はありません。

if(isset($_POST['submit'],$_POST['authcode'])){ 
    //set your cookie here 
} 

あなただけのユーザーがフォーム上の認証コードを送信した後、あなたのクッキーを設定したい場合は、正しいコードは(まだすべてのHTMLの前に行く)<!DOCTYPE html>

前に、あなたのクッキーの設定を移動するには、のように見えます

the PHP manualから:

他のヘッダと同様に、クッキーはあなたの スクリプトからの任意の出力の前に送信する必要があります。これには、出力の前に 呼び出しをこの関数に配置する必要があります( タグおよび空白を含む)。

+0

1.コードの先頭にクッキーを設定すると、ユーザーが認証コードを入力する前に、ユーザーが入力した認証コードが重要なため、目的が失われます。上記のコードでクッキーを設定しても問題はありません。 2. authcodeはURLから来ていません。ユーザーが入力したHTMLフォームから取得します。 3.すべてで問題は解決しません。問題は、Cookieの存続期間が十分に長いにもかかわらず、Cookieがページを離れた後にFirefoxで消えてしまうことです。 – cr78

+0

@ cr78あなたはクッキー設定イベントのタイミングについて誤解しています。あなたのクッキーが正常に設定されていれば、コード内に 'setcookie()'があっても、フォームが見える前にまだ設定されています。私が書いたように、これはヘッダー設定機能です。つまり、ブラウザがページをダウンロードする前に常に*発生します。私は私の答えを更新しました。 – BeetleJuice

+0

私は理解していると思います...つまり、ページ読み込み時(または前)にCookieが設定されていて、ユーザーがフォームに必要な値を入力した後に値が変更されるということですか? – cr78

関連する問題