web-dev-qa-db-ja.com

setcookie()はGoogleでCookieを設定しませんChrome

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

私はw3schoolsの例を試しました:

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

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

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

前もって感謝します。

32
Elyas

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

この問題を回避する方法は次のとおりです。

  • ローカルドメインを設定します(例:/etc/hostsを使用するには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がサブドメインから見えなくなります。

39
Mike West

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

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

setcookie("username", "George", time() + (20 * 365 * 24 * 60 * 60), "/", NULL);
14
John Chornelius

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

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

<?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(私は得る:「クッキーはこれはテストです」)を含むすべてのブラウザで機能しました!しかし、ChromeのCookieインスペクタは「このサイトにはクッキーがありません」と表示し続けます。 Chromeの設定(オプション>フードの下>コンテンツ設定>すべてのCookieとサイトデータ)に保存されているCookieのリストを見つけて、最終的にCookieを見つけました(確認する手順は増えましたが、少なくとも開発者ツールよりも正確です)!

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

5
Elyas

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

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

2
Sahin Yanlık

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

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()+いくつかの数値の仕事でした。私はそれが意味をなさないことを知っていますが、うまくいきました。

1
Satya