3

私のアプリの構造は次のとおりです。サブドメインにフロントエンド js アプリ (Angular) がありapp.、ルートとapi.サブドメインにバックエンド (PHP) があります。私のログインは、セッション Cookie を保存するルート経由で行われます。Cookie は、パス「/」を持つすべてのサブドメインに保存されます。

APIで直接Cookieを取得できます。ただし、同じ URL で、フロントエンドからの ajax GET 呼び出しを介して、Cookie は NULL です。

しかし、Postman (chrome アプリ) のようなアプリケーションを使用して、同じ URL への GET 要求を送信すると、Cookie を取得できます。したがって、私のアプリのフロントエンドに固有のようです。

私のangularアプリの設定は次のとおりです。アプリの設定でこれらのデフォルトを設定しました:

$httpProvider.defaults.useXDomain = true;
$httpProvider.defaults.withCredentials = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];

Chrome と FF の両方でテストしました。フロントエンドとバックエンドの間で Cookie/セッションが利用できない理由がわかりません

2013 年 11 月 20 日更新

また、使用していたバージョンの Angular にも問題がありました。$resourceの代わりに使用していたため、そのバージョンの angular は、使用時に設定を http リクエストに$http添付していませんでした。最新の angularjs バージョンに更新すると、問題が解決しました。withCredentials が設定されていなかったため、xhr リクエストと共に Cookie が送信されませんでした。愚かなことに、クッキーが送信されているかどうかを確認していませんでした。withCredentials$resource

4

2 に答える 2

4

Cookie の可視性 - 説明

有効な Cookie 設定ヘッダーは次のようになります。

セット Cookie: name=Anshuman; ドメイン=www.stronia.com; パス=/

それでは、上記の行について説明しましょう。

道:

Path=/Cookie が表示されるデフォルトのパスです。したがって、パスを指定しないのと同じくらい良いです。

パスになると言うと/。パスの子であるすべてのパスが/Cookie にアクセスできることを意味します。したがって、/fooは Cookie にアクセスでき/foo/bar、Cookie に/foo/bar/...../anythingアクセスでき、Cookie にもアクセスできます。これらはすべてパスの子であるためです/

上記のパスが であると仮定します/mypath/( )のような前述のパスの親、( ) のような兄弟/myotherpath、または ( ) のような兄弟の子は/myotherpath/a/b/c、Cookie にアクセスできないことに注意してください。

言及されたパスと、Cookie にアクセスできるその子だけです。

つまり、上記のパスで始まるパスはすべて、ブラウザーから Cookie を受け取ります。

ドメイン:

ドメインが であると言うとき、www.stronia.comドメインの子であるすべてのドメインがwww.stronia.comCookie にアクセスできることを意味します。上記のすべてのドメインは指定されたドメインの子であるため、 は Cookie へのアクセスを取得し、Cookie へのアクセスも取得します。また、Cookie へのアクセスも取得foo.www.stronia.combar.foo.stronia.comます。anything.....bar.foo.stronia.comwww.stronia.com

ただし、(stronia.comまたは.com) のような前述のドメインの親、( ) のような兄弟、sib.stronia.comまたは ( ) のような兄弟の子はa.b.c.d.sib.stronia.com、Cookie にアクセスできないことに注意してください。

Cookie にアクセスできるのは、前述のドメインとその子だけです。

つまり、上記のドメインで終わるドメインはすべて、ブラウザーから Cookie を受け取ります。


あなたの問題 - 解決しました

さて、あなたのケースでは、Cookie をapp.サブドメインとapi.サブドメインで共有したいと考えています。したがって、上記のルールを使用して、両方のサブドメインで受信できる Cookie を設定するだけです。

yourdomain.comあなたのドメイン名が

setcookie ("CookieName", "CookieValue", $expirationtime , "/", "yourdomain.com");

Laravel4 では:

put( 'CookieName','CookieValue', $expirationtime, '/', 'yourdomain.com');

これを行うと、Cookie は と の両方に表示されapp.yourdomain.comますapi.yourdomain.com

于 2013-11-20T11:24:36.773 に答える