web-dev-qa-db-ja.com

JSでCookieを設定し、PHP problemで読み取ります

JavaScriptでCookieを設定し、PHPで別のページでそれを読み取ろうとしています。私はすることでクッキーを書くことができます

document.cookie = cookieName+"="+cookieValue;

と私は部分的に動作します。 -Cookieは書き込まれ、$_COOKIE[cookieName]を使用して読み取ることができますが、同じWebページでのみ読み取りが可能です。

これは実際にはあまり役に立ちません。別のページで読む必要があります。私は通常asp.netとc#で開発しているので、phpが初めてです。私は何か間違っていますか?

お時間をいただきありがとうございます!

EDIT1:両方のページが同じドメインにあります。 site.com/index.php-> site.com/index2.php

EDIT2:Cookieは次の1ページで設定されます。

function SetCookie(cookieName,cookieValue,nDays) {
 var today = new Date();
 var expire = new Date();
 if (nDays==null || nDays==0) nDays=1;
 expire.setTime(today.getTime() + 3600000*24*nDays);
 document.cookie = cookieName+"="+escape(cookieValue)
                 + ";expires="+expire.toGMTString();
}

別のページではアクセスできませんが、同じページでは...

EDIT3:私はドメインを設定しようとし、path=<?php echo $_SERVER['HTTP_Host']; ?>をjavascriptコードに追加しました...まだ何もありません。

EDIT4:これまでのところ..

document.cookie = cookieName+"="+escape(cookieValue)+"; expires="+expire.toGMTString()+"; path=/"+"; domain=.<?php echo $_SERVER['HTTP_Host']; ?>";

それでも、同じページからのみCookieを読み取ることができます。

EDIT5:ああ..私の..神...それはずっとタイプミスでした...ただ "path =/" + "; dom ..."を削除するために必要でした私はとても恥ずかしいです私自身の今...私は私のクッキーもリセットするので、ジャレッドは今、不幸にもあなたの投稿をアンサーとして受け入れることができません...私は私の名前に恥をかきました!!! ....

27
Andrej

JavaScript Cookieの設定、特にパスとドメインアクセスの詳細については、こちらをご覧ください。

http://www.quirksmode.org/js/cookies.html

何が起こっているのかは次の2つのうちの1つだと思います。

  1. 同じドメイン/サブドメインからCookieにアクセスしていない、または
  2. 他のページは、Cookieが指定したパスの一部ではありません。

そのため、Cookieは、サブドメインやディレクトリパスを介してアクセスできるように、ブラウザに関連情報を提供していません。

document.cookie = 'ppkcookie1=testcookie; expires=Thu, 2 Aug 2001 20:47:11 UTC; path=/; ;domain=.example.com'

.example.comは単なるサンプルドメインであり(そこに自分のドメインが必要です)、すべてのサブドメインにまたがるので、最初の.以外のワイルドカードは必要ありません。そして、expires=日付を生成する必要があります。 QuirksModeから:

function createCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    } else {
        var expires = "";
    }
    document.cookie = name+"="+value+expires+"; path=/; domain=.example.com";
}

domain=ビットをQuirksModeの関数に追加しました。

[〜#〜] edit [〜#〜](以下の例は元々私のウェブサイトのページを参照していました。)

Andrej、これは私にとって完璧に機能します:

http://example.com/test.php

function createCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/; domain=.example.com";
}

createCookie('cookieee','stuff','22');

http://example.com/test/test.php

<pre>
<?php 

print_r($_COOKIE);

?>

そして、$_COOKIEの印刷にはCookieが表示されます。 Cookieを調べると、.example.comがドメインとして正しく設定されていることに注意してください。

29
Jared Farrish

Cookieは、同じドメインで実行されているコードによってのみアクセスできます。

PHPと.NETコードが異なるドメインで実行されている場合、ブラウザはドメインAのCookieをドメインBへのリクエストとともに送信しません(またはその逆)-この強制- Same-Origin Policy Webを高速に保つのに役立ちます(ブラウザはすべてのユーザーのCookieをall送信する必要がないため)リクエストすると、サーバーは、関心のある2つのフィールドを取得するためにメガバイトの無駄なデータを解析する必要がなく、安全です(私が持っている場合、yourアカウントをハイジャックできるため)安全なセッションキーを持つCookie。

@Jaredは QuirksMode から適切なリンクを投稿しました。これにより、パスとドメインの設定の概要がexcellentになり、サイト内で必要なアクセスが正確に得られます。

5
Sean Vieira

さらに情報を提供できますか?両方とも同じドメインにあるだけで、異なるファイルですか?行です

document.cookie = cookieName+"="+cookieValue;

クッキーの作成に使用している唯一の行は?

2
John Nickerson

Cookieで利用可能なドメインを拡張する場合は、Cookieの一部として指定する必要があります。

document.cookie = cookieName + '=' + cookieValue + '; path=/;';
2
zzzzBov

Cookieのパスを設定する必要があります。

たとえば、JavaScriptでCookieパスを指定しない場合、現在のページのパスが設定されます。

JSの場合:

Cookieを設定するには:

document.cookie = "key=value; expires=Fri, 03 Aug 2018 12:00:00 UTC; path=/";

Phpで:

Cookieを設定するには:

setcookie('key', 'value', (time() + (3600*2)), '/');

アクセス用:

if (isset($_COOKIE['key'])) echo $_COOKIE['key'];
0
Tanvir Ahmed