1


0

私は2つの「ドメイン」にまたがってローカルに取り組んでいます。 私のマシンにはenterprise.localとapplication.localの仮想ホストがあり、 "local"または ".local"にドメインクッキーを設定する必要があります。 application.localでは、私はこれを持っています:

setcookie( 'iPlanetDirectoryPro'、trim($ token_id)、 '0'、 '/'、 '.local'); header( 'Location:/ adcom-sso');

私もこれを試しました:

header( 'Set-Cookie:iPlanetDirectoryPro ='。 trim($ token_id) '; path = / '); header( 'Location:/ adcom-sso');

setcookie()`を使うと、クッキーは設定されません。 `Set-Cookie`ヘッダを使ってクッキーをセットします。 両方からリダイレクトを削除しましたが、結果は変わりません。 これは `Set-Cookie`では動作しますが、 setcookie() `では動作しません。 私が使用するソリューションを実際には好みがないのでそれは問題ないでしょうが、 `Set-Cookie`ソリューションでは、ドメインを追加するとすぐにすべてが壊れます。

header( 'Set-Cookie:iPlanetDirectoryPro ='。 trim($ token_id) '; path = /; domain = local ');

ドメイン値を追加するとすぐに、ヘッダーエラーが発生します。

ヘッダーに複数のヘッダーを含めることはできません。改行が検出されました。

ドメイン値を "local"と ".local"として試しました。 動作は変わりません。

Cookieに明示的にアクセスする必要はめったにないので、明らかなものが足りないことを願いますが、実際には表示されません。 任意の洞察力は大歓迎です。

*更新:*私はこれをもう少し狭めたと思います。 ドメイン値を含めない限り、両方の方法でうまくいくようです。 cookieの特定のドメインとして "local"または ".local"を使用することに問題があるのでしょうか。

1 Answer


2


編集:私は今、http://www.ietf.org/rfc/rfc2109 [RFC2109]、4.3.2クッキーの拒否を見てきました。

  • Domain属性の値にドットが埋め込まれていないか、ドットで始まっていません。
    …​

  • ドットが埋め込まれていないため、Domain = .comまたはDomain = .comのSet-Cookieは常に拒否されます。 _

セキュリティ上の理由から、ブラウザは '.local’を拒否しているようです。 ドメインにCookieを設定するには、少なくとも2つのドットが必要です(例: '.cookiedomain.local')

1つのサブドメインからクッキーを設定する(例: 別のサブドメイン(one.local)(例: another.local)AFAIKはできません。 この問題を解決するためにできることは、すべてのCookieを設定または取得し、URLに含まれるCookieデータをクエリパラメータとして使用して、ユーザーを元の場所に再度リダイレクトするCookieドメインにユーザーをリダイレクトすることです。 マイクロソフトは独自のドメイン(msn.com、microsoft.com)に対してこのようにしています(または行っています)。

'' '' '

あなたが得るエラー(「ヘッダーは含んでいないかもしれません…​」)は、あなたが `headerの引数として渡した文字列の場合にのみ発生します。 () `はスペースやタブのどちらも続かない改行文字を含みます(これは次の行にヘッダーを続けます)。

さて、 setcookie()は実際にはhttp://us.php.net/manual/en/function.urlencode.phpになります。 urlencode()]の値( setr​​awcookie()はそうではないでしょう)ので、改行はそこでエラーを引き起こさないでしょう。

一方、 trim()関数は、引数の最初と最後からのみ空白を削除し、それ以外は空白にします。改行文字はそのままです。 そのため、おそらく代わりに `preg_replace('/\s / '、' ') `のようなものを試すことができます。

http://us.php.net/manual/en/function.setcookie.php[`setcookie()`]アプローチがうまくいかないのはなぜあなたにとってすぐにはわからない。 あなたは実際にクッキーを見ているかもしれません( http://us.php.net/manual/en/function.setcookie.php[`setcookie()`]で設定されています)が、URLのエスケープを期待していないのかもしれません、そしてあなたのコードのどこかでそれを静かに拒否しています。

しかし、それがあなたの最初の header()がうまく動作するように見える理由を説明していません(改行あり)。クッキーの値の中には改行があるものとそうでないものがあります。

ドメインを '.local'(先頭の '。')に設定することは、サブドメインにCookieを表示させたい場合は正しい方法です。

http://us.php.net/manual/en/function.setcookie.php[`setcookie()`]でクッキーを設定することに関するいくつかの追加の警告はPHPドキュメント(特にユーザのコメント)で議論されています。