2012-04-23 10 views
7

最近私は3つのCake Appsを作っており、3人ともこの問題を共有しています。設定は主に株式であり、セッションオプションとしてこれを使用します。誰もがグーグルの多くの後CakePHPはログアウトを続けます

Configure::write('Session', array(
    'defaults' => 'php', 
    'cookie' => 'test' 
)); 

だけで、セキュリティレベルが高すぎることを示唆しているが、私は、この値を変更したことがない、それはです:

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

編集:私はまた、低セキュリティで試してみました変更はありません。

ユーザーがログインしているかどうかを確認するために基本認証のみを使用しています。

ログイン後、Cookieの有効期限が3時間後に設定され、再度ログインするまで有効期限は更新されませんが、これは正常ですか?

私はこの問題を全く複製していないようですが、時々私はログインし、次のクリックはもう一度ログアウトし、もう一度それはしばらく続きます。

私はWindows 7でChromeを使用していますが、ウェブサイトにはAJAXはありません。

アイデア?ありがとう。

+0

ある

は... 'を構成::書き込み( 'Security.level'、 '低')を変更してみてください;' !! – Rikesh

+0

ハンドルを外してブラウザをすぐに訴える必要はありません;) – jeremyharris

+0

@Jleagleここで、ログに記録されたユーザーのCookie時間はどのように設定しますか?コードを投稿してください。 – thecodeparadox

答えて

5

あなたはAjaxを使用していますか?問題はIEでのみ起こっていますか?

IEは、ブラウザ自体へのAjax呼び出しに異なるブラウザエージェント文字列を使用します。セキュリティを強化するために、Cakeはブラウザエージェントをチェックし、IEの場合、別のブラウザがエージェントが異なるのでセッションをハイジャックしようとしていると考えます。あなたはChromeブラウザ上のCakePHPのセッションに問題が一つだけではありません

Configure::write('Session.checkAgent', false); 
+0

私はAJAXをまったく使用していません。私が試した唯一のブラウザはChromeです。 – 472084

+0

Excellent !!! jQueryでのAjaxの問題を修正しました – Ondrej

0

あなたはと、このチェックを無効にすることができます。

Pixelastic仲間コーダ引用、following fixことを示唆している:

ちょうどそれの次の行ドロップ、app/config/session_custom.phpという名前のファイルを作成します。

// Killing this config that was causing so much trouble with Chrome 
ini_set('session.referer_check', ''); 

// No session id in url 
ini_set('session.use_trans_sid', 0); 

// Using custom cookie name instead of PHPSESSID 
ini_set('session.name', Configure::read('Session.cookie')); 

// Cookie like time, depending on security level 
ini_set('session.cookie_lifetime', $this->cookieLifeTime); 

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

を次に、あなたのcore.phpファイルにConfigure::write('Session.save', 'session_custom');を設定します。

+0

これは役に立ちましたが、私はその1.3について、2.1ではないと思います。この行 'ini_set( 'session.name'、Configure :: read( 'Session.cookie'));'私はすでに2.1に追加されていると思います - 私はさらに調査します – 472084

+0

私はちょうど 'ini_set( 'session.referer_check '、' '); '行を探して、あなたの完全なコードを書いて、それが起こらないようにしてください。私はクロムのためだけにその問題を信じていますが。 – 472084

0

問題は、セッションである:

まずウルチェック 'は、phpinfo();'

セッションがファイルベースであるかどうかを確認します。

はいの場合は、処理を進めます。

のみ、このコードを含む新しいスクリプトファイル(PHP)を作成:それはあなたがnullまたは空の文字列を取得する場合は、このプロセスのために行く<?php var_dump(session_save_path());?>

実行を:

  1. 最初にディレクトリを作成しますルートフォルダの名前は 'xyz'か何でも必要です。
  2. 書き込み可能(chmod 777)にします。
  3. セッションを開始するスクリプトに移動し、セッションを開始する前にsession_save_pathを新しく作成したディレクトリに変更します。すなわち:session_save_path('pathToxyz');

です。

セッションがメモリとして設定されている場合は、設定は不要です。システムメモリを使用するだけです。その場合、あなたはこの問題に遭遇したことはありません。

+0

phpinfoのどの部分に私が知る必要があるか教えてください。 '' var_dump(session_save_path()); '私に' string(20) "/ var/lib/php/session" ' – 472084

+0

を与えました。だからこれはあなたの解決策ではありませんプログラム内で何が起こっているのかを得るために、毎回ログインのためにデータを 'var_dump'してみてください。多分これはあなたを助けるでしょう:) –

+0

とにかく助けてくれてありがとう! – 472084

1

同じ問題が発生した後、これはSession.cookieTimeoutの値に起因することがわかりました。 PHPセッションはまだ有効ですが、セッションクッキーの有効期限は更新されません。これは、それはあまりにもMEEで起こる今、私のセッションの設定

Configure::write('Session', array(
     'defaults' => 'php', 
     'timeout' => 30, // The session will timeout after 30 minutes of inactivity 
     'cookieTimeout' => 1440, // The session cookie will live for at most 24 hours, this does not effect session timeouts 
     'checkAgent' => false, 
     'autoRegenerate' => true, // causes the session expiration time to reset on each page load 
    )); 
関連する問題