33

複数のサブドメインを持つサイトで作業していますが、その一部は独自のセッションを取得する必要があります。

うまくいったと思いますが、Cookie の処理について理解できないことに気付きました。それを説明するドキュメントには何も表示されないので、ここに誰かが質問に光を当てているかどうかを確認したいと思いました。

私がそうするなら:

session_start();

私はこのようなセッションクッキーになります:

subdomain.example.net

ただし、Cookie ドメインを自分で設定しようとすると、

ini_set('session.cookie_domain', 'subdomain.example.net');

または好き

session_set_cookie_params( 0, "/", "subdomain.example.net", false, false);

最終的に .subdomain.example.net の Cookie が作成されます (開始のドットに注意してください)。これは、「すべてのサブドメイン (またはこの場合はサブサブドメイン) に一致する」ことを意味すると考えています。

これは、セッションだけでなく、実際にはすべての Cookie で発生するようです。自分で Cookie ドメインを設定すると、自動的にドットが先頭に追加されます。つまり、このドメインとそのすべてのサブドメインを意味します。ドメインを設定しないと、現在のドメインのみを使用して正しく取得されます。

これの原因と、その先頭のドットを制御するためにできることはありますか?

ありがとう!

4

6 に答える 6

24

PHP の Cookie 関数は、自動的に $domain の前にドットを付けます。この動作が望ましくない場合は、ヘッダー関数を使用できます。例えば:

header("Set-Cookie: cookiename=cookievalue; expires=Tue, 06-Jan-2009 23:39:49 GMT; path=/; domain=subdomain.example.net");
于 2008-12-07T23:42:01.707 に答える
22

「 http://subdomain.example.net」でPHPスクリプトを実行する場合は、ドメインパラメータを使用しないでください。

setcookie('cookiename','cookievalue',time()+(3600*24),'/');

「subdomain.example.net」(「。subdomain.example.net」ではない)を含むCookieを取得します

于 2009-04-13T23:14:05.077 に答える
14

RFC 6265 をすべて読むと、「ホストのみ」の Cookie を持つ唯一の適切な方法は、ドメイン属性を設定しないことであることがわかります。

https://www.rfc-editor.org/rfc/rfc6265#section-5.4

于 2011-11-14T13:14:46.453 に答える
11

これは古い質問だと思いますが、私はこの問題を抱えていましたが、上記の回答はどれもうまくいきませんでした。

サブドメインのセッション Cookie を設定したいだけでなく、httponly とセキュアも有効にしたいと考えていました。

先頭の . サブドメインの前に、Kevin と stlsvik が正しいドメイン属性を設定しないでください。

したがって、これを行い、引き続き httponly とセキュア モードを設定できるようにするには、次のようにドメインを NULL に設定します。

session_set_cookie_params(0, '/', NULL, TRUE, TRUE);

これで、特定のサブドメイン (先頭の . なし) 用のセッション Cookie が作成され、httponly および secure が true に設定されます。

于 2012-02-25T12:14:10.350 に答える
2

これは誰かを助けるかもしれません(私はこれを理解するのに数時間を費やしました)。ソース ファイルに変更を加えた後、それをテストする前に、ブラウザーを閉じて、すべてのドメインとサブドメインの PHPSESSIONID を適切に破棄します。

これで時間を節約できることを願っています!

于 2011-01-23T13:43:01.660 に答える