0

1.1 からアップグレードしたばかりの CakePHP 1.2 ビルドがあります。残念ながら、セッションは正しく機能していません。

私はスタックオーバーフローの他のスレッドに何時間も費やし、提供されたソリューションを試しましたが、これまでのところ何も機能していません。

ユーザーが accounts/login でログインすると、次のように accounts_controller.php でセッションを設定します。

$this->Session->write('Account', $someone['Account']);

print_r($this->Session->read());

$this->redirect("/accounts/profile");
exit;

読み取りにはすべての正しいセッション情報が表示されるため、セッションは確実に保存されます。ただし、/profile にリダイレクトされるとすぐに、すべてがなくなります。

   function profile() {
     print_r($this->Session->Read());

これの出力は次のとおりです。

Array ( [Config] => Array ( [userAgent] => [time] => 1376738563 [timeout] => 10 ) )

Cake のセキュリティ レベルをコアで低く設定しましたが、それでも機能しません。

Configure::write('Security.level', 'low');

私の問題は本質的にこれと同じです: リダイレクト後に Cakephp セッションが破棄されます

しかし、セッションが保存されていることは確かです (確認のために、ハードディスク上のセッション ファイルを開きました)。そして、その問題に対する他の解決策はありませんでした。

このスレッドも非常に役立つことがわかりましたが、そこに示されている解決策もうまくいきませんでした: cakephp lost session variable when redirect

私はphp.iniの設定にあまり熟練していません。非常に単純なことを見逃した可能性がありますが、髪を引き抜こうとしています。私が見逃している可能性のあるものについての手がかりを教えてもらえますか?

私の php.ini ファイルと core.php ケーキ ファイルを掲載していただけると幸いです。

関連するコア設定は次のとおりです。

Configure::write('Session.save', 'cake'); //I have tried 'php' also
Configure::write('Session.cookie', 'CAKEPHP');
Configure::write('Session.timeout', '120');
Configure::write('Session.start', true);
Configure::write('Session.checkAgent', false);
Configure::write('Security.level', 'low');

このスレッドを読んだ後、以下にこれらを追加しました: cakephp lost session variable when redirect It did not work before or after. :)

 Configure::write('Security.cookie', 'cakephpfdebackend');
 Configure::write('Session.cookieTimeout', 10000);
 Configure::write('Session.cookie_secure',false);
 Configure::write('Session.referer_check' ,false);
 Configure::write('Session.defaults', 'php');

私のブラウザでは Cookie が有効になっており、Firefox と Chrome の両方を試しました。現在、ローカルホストで作業しているため、すべてのファイルに完全にアクセスできます。必要な質問をしてください - 私は絶望的です。

編集: 自分のサイトをライブ サーバーにプッシュすることができました。そこでは、そのサーバー上の他のサイトですべてが機能することがわかっていました。そして、私のサイトはそのサーバーで問題なく動作します。これにより、問題が私のコンピューター/Apache/php の設定にあることが確認されます。

4

1 に答える 1

2

OK、これも少し言い換えた回答として投稿させてください。

ご覧のとおり、このような問題は通常、Cookie に関連しているため、最初に行うことは、Cookie が実際に受信、設定、およびサーバーに送り返されているかどうかを確認することです。

Cookie が設定されているかどうかを確認することは、ほとんどのブラウザーですぐに使用できます。Firefox では、[ページ情報] ダイアログ ([ページ情報] > [セキュリティ] > [プライバシーと履歴] > [Cookie の表示] ) で見つけることができます。Chrome では、詳細コンテンツ設定 ( [設定] > [詳細設定を表示] > [プライバシー] > [コンテンツ設定] > [すべての Cookie とサイト データ] )、IE では開発者ツール ( [キャッシュ] > [Cookie 情報を表示] ) から利用できます。

Cookie が送受信されているかどうかの確認は、ほとんどのブラウザーの開発者ツールで行うことができます。Firefox では、コンソールと [ネットワーク] タブ ( Firefox ボタンまたは [ツール] > [Web 開発者] > [Web コンソール] > [コンソール/ネットワーク]) で調べることができます。 Chrome では、IE と同様 ( F12 > Network > Cookies ) 、Network タブ ( F12 > Network ) にあります。

あなたの場合の問題であると私たちが考えたように、送信されていないCookieは、ドメインやパスの値が間違っている、Cookieが安全な接続用にのみ定義されている、またはCookieが単に期限切れになっている可能性があります. PHP セッション Cookie 設定が正しく構成されているかどうかを で確認できます。これにより、問題が最も発生しやすい 、、、および設定session_get_cookie_params()の値が表示されます。lifetimepathdomainsecurehttponly

もちろん、ブラウザの設定や拡張機能などが原因で問題が発生している可能性もあるため、新しいデフォルトのブラウザ プロファイルでテストすることをお勧めします (ブラウザがサポートしている場合)。

于 2013-08-17T19:51:15.243 に答える