2011-10-05 7 views
0

私は、ユーザーがサイトにログインできるようにCI認証コントローラを作ったし、ログインした後、私は私が使用し続ける以前に訪問したURLに彼をリダイレクトしています。残念ながらCodeIgniterの認証概念の問題

$this->session->set_flashdata('return_url', current_url()); 

こと問題を引き起こす。ユーザーがブラウザの複数のタブを開いてその変数が上書きされるたびに、ログインに成功すると、ユーザーはすべてのタブの同じURLにリダイレクトされます。

だから私の質問は:それはMY_Controller内部のカスタムコントローラをロードすることは可能ですか?

$CI =& get_instance(); 
$CI->router->set_class('authentication'); 
$CI->router->set_method('login'); 

編集:私はこの問題を解決するための任意の他のアイデアを理解するだろう私は(MY_Controllerのコンストラクタ内で)使用してみましたが、それは働いていなかった

MY_Controllerextends CI_Controllerというクラスです) 。

+0

いいえ、CIでは、別のコントローラーでコントローラーを呼び出すことはできません。 –

+0

自動ロードモデルを認証に使用しないのはなぜですか?私はモデルとして私の認証システムを書いて、それをオートローディングしましたが、まだ問題はありませんでした。私はコードをもっと読みやすくするためにも、コンストラクトメソッドで定義を定義しています。 – Arda

答えて

2

ソリューションは、セッションVARに戻りURLを保存していないことが、GET /ポストパラメータでそれを周りに渡す(、適切にエンコードを取得した場合の、base64ですなわち。)。唯一の追加は、(有効な)戻りURLが設定されていない場合、標準の戻りURLでなければなりません。

--- EDIT phpがちょうどこの機能を持っているのはなぜですか? urlencodeはあなたの友人です!認証コントローラに到達するためにPHPのCURLを使用する(例えばMY_Controllerなど)、コントローラ内部のカスタムコントローラをロードするためにhttp://nl3.php.net/urlencode

+0

'base64'のハッシュにはスラッシュが含まれていて、それはcodeigniterのURLで壊れてしまいます。 – Teneff

+0

私はこのスラッシュの問題を避けるため、文字列をデコードする前にすべてのスラッシュをエンコードして反転した後にハッシュの感嘆符で置き換えます。 – Teneff

0

。これは、すべてのリクエストに応じて費用のかかるプロセスであるよう

これは、パフォーマンスに影響し得ます。

他のオプションは、基本クラスのシステムを使用して(http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRYを参照)、または認証の世話をするために、自動ロードされたライブラリーを作成することを含むことができます。

0

ログインしていないユーザーをログインページにリダイレクトするときは、ユーザーが到着した場所からの価値を保持する隠し変数 "redirect_to"を保持します。 $ _SERVER ['HTTP_REFERRER']を使用できます。ログイン後、単に "redirect_to"の値にリダイレクトしてください。こうすることで、ユーザーが自分が来たURLからユーザーをリダイレクトするようにフラッシュデータを設定する必要はありません。

+0

これは '$ _SERVER ['HTTP_REFERER']'であり、PHPヘッダでユーザをリダイレクトしたときは使用できません – Teneff

関連する問題