33

Cookie の設定方法について、いくつかの PHP チュートリアルを実行しています。FF4 と IE9 では Cookie が正常に設定されていることに気付きましたが、Chrome (11.0.696.60) では設定されません。PHP ファイルは XAMPP (localhost) から提供されました。

w3schools の例を試しました。

<?php
setcookie("user", "Alex Porter", time()+3600);
?>

そして、このサイトから(localhost 環境の場合):

<?php
setcookie("username", "George", false, "/", false);
?>

前もって感謝します。

4

6 に答える 6

40

IP アドレスの Cookie を無効localhostにすることは、設計上の決定でした。参照: https://code.google.com/p/chromium/issues/detail?id=56211

この問題を回避するには、次の方法があります。

  • ローカル ドメインを設定します (例: edit /etc/hoststo use 127.0.0.1 localhost.com)。
  • http://myproject.localhacks.com/ (127.0.0.1 を指す) を使用します。
  • Cookie を設定するときは、空のドメイン値を使用します。

たとえば、PHP では次のようになります。

setcookie(
  $AUTH_COOKIE_NAME,
  $cookie_value,
  time() + cookie_expiration(),
  $BASE_DIRECTORY,
  null,
  false,
  true
);

ここでの値nullは、ドメインを設定してはならないことを示しています。

注:ドメインを設定しないと、Cookie がサブドメインに表示されなくなります。

于 2011-05-01T15:41:13.040 に答える
15

ドメインは NULL に等しくなければなりません。

& 有効期限を指定する必要があります。つまり、

setcookie("username", "George", time() + (20 * 365 * 24 * 60 * 60), "/", NULL);
于 2013-04-18T09:06:37.613 に答える
5

これは Chrome の「開発者ツール」機能のバグのようです。Cookie を設定しようとしていた (取得はしていない) 間ずっと、他のブラウザーで動作していました。FFのCookie表示セクションを信頼するか、IEのCookieファイルを見つけると仮定すると、うまくいきました。Chrome では、「開発者ツール」の「Cookie」セクション (開発者ツール > リソース > Cookie) に依存していました。

さらに一歩進んで、WHT にある次のスクリプト ( Natcoweb による投稿)を使用して、実際に Cookie の値を出力することにしました。

<?php
setcookie('test', 'This is a test', time() + 3600);
if(isset($_COOKIE['test'])){
$cookieSet = 'The cookie is ' . $_COOKIE['test'];
} else {
$cookieSet = 'No cookie has been set';
}
?>

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

<?php
echo $cookieSet;
?>

</body>
</html>

そして、Chrome を含むすべてのブラウザーで動作しました (「Cookie はこれはテストです」と表示されます)。ただし、Chrome の Cookie インスペクタには、「このサイトには Cookie がありません」と表示され続けます。また、Chrome の設定 ([オプション] > [フードの下] > [コンテンツ設定] > [すべての Cookie とサイト データ]) に保存されている Cookie のリストを見つけることもできました。

結論: Cookie が設定されていましたが、Chrome の開発ツールは何らかの理由でそれを見ることができません。

于 2011-05-02T03:49:24.827 に答える
2

システムの日付を確認しましたか?$ dateそして、それが古い時間である場合は、時間を変更する必要があります$ date -s 2007.04.08-22:46 + 0000

これがお役に立てば幸いです。私は同じ問題を抱えていました、そしてそれはうまくいきました

于 2012-04-12T11:35:44.413 に答える
2

以下のように試したときに同じ問題に直面しました

setcookie("gb_role",base64_encode($_SESSION["role"]),time()+60*60*24*30);

私はそれを下に変更したとき

setcookie("gb_role",base64_encode($_SESSION["role"]),time()+2592000);

違いは time()+60*60*24*30 ではなく、time()+いくつかの数値作業を行っただけです。意味がないことはわかっていますが、うまくいきました。

于 2012-04-13T10:13:49.117 に答える
1

このコードは、IE、Chrome、および FF で機能しています。

if($_COOKIE['language']==NULL || empty($_COOKIE['language']))
{


    $dirname = rtrim(dirname($_SERVER['PHP_SELF']), '/').'/';

    $expire=time()+31536000;


    setcookie("language", "English",$expire,"$dirname","mydomain.com",false,false);
}
于 2014-04-19T17:59:45.920 に答える