3

構築中の Yii アプリケーションの認証を設定しようとしています。デモ アプリケーションから始めて、スタイル、コンテンツ、および使用したいパスワードを忘れた場合や電子メールの確認スキームにいくつかの変更を加えました。

これはローカルで機能します。問題は、サーバーにプッシュするとログインできないことです。ユーザーの認証後に行われる login() への呼び出しと、main.php の構成方法に応じてセッションまたは Cookie の保存が完了することがわかっています。成功しました。ユーザーはリダイレクトされる前にログインされます。しかし、これはページのリダイレクト全体では持続しません。例えば、 $this->redirect(Yii::app()->user->returnUrl)

actionLogout() メソッドが呼び出されることはありません。アプリケーションの動作に変更を加えることなく、Cookie ベースの認証を有効または無効にしようとしました。

ローカルで動作するため、問題はサーバー構成にあると確信しています。しかし、私のphpinfoはセッションが有効になっていることを示しているので、それを見ることができません。

ここで問題が何であるかについて誰かが考えを持っていますか? main.php、SiteController.php、phpinfoの出力を添付します。

main.php - http://pastebin.com/LR4i6vYZ

SiteController.php - http://pastebin.com/Fgm1a1nV

phpinfo - http://pastebin.com/CDE2WqvK

4

1 に答える 1

3

私はこれとまったく同じ問題を抱えていて、問題の原因を見つけました(少なくとも私の場合)。前述のように、Cookie の TTL 値を設定することはお勧めできません。これは基本的に「remember me」を強制することと同じですが、ユーザーはあなたがそれを行ったことを認識していないため、安全ではありません。

私が遭遇した問題は、ログインがライブサーバーにデプロイされたときにローカルで正常に機能していましたが、「remember me」が設定されている場合にのみ機能し、これは本質的に Yii をセッションベースではなく Cookie ベースの認証に切り替えることです ( 「私を覚えている」を選択しない)。

問題は、私のリモート サーバーでは、Yii がデフォルトの PHP セッション パスに書き込むことができなかったことです (私のローカル マシンではできましたが、リモート サーバーでは、ユーザー アカウントは自然にそれよりもはるかにロックダウンされていました)。

Web ルートの外にセッション フォルダーを作成し、これを yii 構成ファイルのセッションの保存パスとして設定することで問題を解決しました。

保護>>設定>>main.php

'components'=>array(
    ...
    'session' => array (
        'savePath' => 'pathToSessionsFolder',
    ),
    ...
),

これで、Yii はセッション情報を正しく書き込めるはずです。セッション ID を持つ Cookie はクライアント上で常に正しく設定されていましたが、Yii は以前は保存できなかったサーバー上に書き込まれたセッション情報と照合できるはずです。

これに対する別の解決策は、同じ方法で Yii 設定のデータベースを介してセッション管理をオンにすることです (テーブルが存在しない場合、Yii はテーブルを作成する必要があります)。

'session' => array (
    'class' => 'CDbHttpSession',
    'connectionID' => 'db',
    'sessionTableName' => 'table_name',
),
于 2013-08-30T11:42:14.710 に答える