2011-10-28 7 views
0

私はCakePHP(v 1.3)とAuthコンポーネントを使用しています。現在、すべてのクッキーはHTTPとHTTPSの間のsnycにありません。サイトのHTTPとHTTPSの部分のクッキーが一致しない

たとえば、ユーザーはHTTPにログインしてHTTPSにログインすることはできません。さらに悪いことに、ユーザーAはHTTPにログインでき、ユーザーBはHTTPSにログインできます。これは

(カート内のアイテムのような)だけでなく、他のもののために何が起こっている

私が起こっているか、どのようにそれを修正することです何見当がつかない。

HTTPとHTTPSで同じCookieを使用するにはどうすればよいですか?

+0

これは通常、HTTPまたはHTTPSによって送信される一般的な要求では、さまざまなサイトの内容が表示される可能性があります。 –

答えて

0

これはおそらくhttpsでページにアクセスしたときに送信されるセキュアなCookieによって発生している可能性があります。 httpsでページにアクセスすると、CakePHPはsession.cookie_secureを自動的に設定します。この動作を無効にするには

cake\libs\cake_session.php

ini_set('session.cookie_secure', 0);ini_set('session.cookie_secure', 1);を変更私は、HTTPSを介してアプリケーション側でそれに対処してのログインを許可する(およびすべてのメンバーページ)することをお勧めします。

+0

私は既にこれをやっていますが、ページがhttpの場合は、beforeRender()のすべてのユーザーページでhttpsにリダイレクトされます。だから私は何をすべきか分からない。 –

+0

http:// stackoverflowで受け入れられた答えで推奨されていることを実行してください。com/questions/308659/session-not-saving-when-ssl-to-non-ssl – Petr

+0

私にそこを指摘してくれてありがとう。私はそれが問題を解決することを確認しようとしています。 :) –

0

コアコードを変更することは、ほとんどの場合、悪いことであり、あなたのケースでは、必要なものを実行する可能性がありますが、ケーキの方法です。アプリ/設定/ core.phpの中

:セッション

のため、必要なパラメータを持つ mysession.phpファイルを作成します。 Session.save値アプリ/ configに

//Configure::write('Session.save', 'php'); 

//this will look for a 'mysession.php' file in app/config 
Configure::write('Session.save', 'mysession'); 

を変更

ini_set('session.use_trans_sid', 0); 
ini_set('session.name', Configure::read('Session.cookie')); 
ini_set('session.cookie_lifetime', $this->cookieLifeTime); 
ini_set('session.cookie_path', $this->path); 

//overwrite Cake setting already set by CakeSession 
ini_set('session.cookie_secure', 0); 

はまた、あなたが安全でないことを、あなたのクッキーを設定した場合、同じセッションとしてクッキーがHTTPS のために使用されているため、HTTPSを使用する利点のほとんどが、なくなっていることに注意してくださいそして HTTPを使用すると、HTTPSのためにセッションを盗み出すことが容易になります。

私は、HTTPS経由の管理部分とHTTPを介した公開部分とを必要とするWebアプリケーションの場合がありました。 app_controller.phpでは

:私は2人の異なるCookie名を指定することで、両方の部分を分離するために管理し

if(env('HTTPS') 
{ 
    Configure::write('Session.save', Configure::read('Session.save') . '_https'); 
} 

アプリ/ configに

ini_set('session.use_trans_sid', 0); 
ini_set('session.name', Configure::read('Session.cookie') . 'S'); 

//cookie destroyed when users close their browser 
ini_set('session.cookie_lifetime', 0); 

ini_set('session.cookie_path', $this->path); 

ini_set('session.cookie_secure', 1); 
で* mysession_https.php *と呼ばれる別のファイルを作成します

これはHTTPとHTTPSの2つの異なるセッションを作成しますが、すべての機密データまたはプライベートデータがHTTPS経由でHTTPの部分がスムーズなナビゲーションを得るためにセッションを必要とするため、私の場合は問題ありません。

+0

httpでhttpsのCookieを見ることはできますか?例えば、私はそれらのプロフィール情報をhttpで表示したくないのですが、ログインしている場合は、httpに "ログイン"リンクを表示したくないのですが、代わりに "自分のアカウント"のリンクを表示したいと思います。 –

+0

セキュアなクッキーは、安全でない転送を防ぐためにhttp URLに送信されることはありません。あなたが望むことをするには、成功したログインの直後に特別なhttpページにユーザーをリダイレクトすることができます。これは、ユーザーがログインしていることを示すためにhttpセッション変数を設定すると便利です。ユーザーはログアウトします。しかし、httpsからhttpにリダイレクトされるロケーションヘッダーを取得した場合、ブラウザが不平を言うかどうかはわかりません。 – nIcO