私のコントローラの多くは、このような機能を持っています。セッションが終了し、そのような関数が呼び出されたときにCIで取るべき最も良い尺度は何ですか?期限切れのセッションの処理
$this->foo_model->create_bar($this->session->userdata('userid'), $bookId);
私のコントローラの多くは、このような機能を持っています。セッションが終了し、そのような関数が呼び出されたときにCIで取るべき最も良い尺度は何ですか?期限切れのセッションの処理
$this->foo_model->create_bar($this->session->userdata('userid'), $bookId);
私は完全に多分あなたの質問を得ることはありませんが、あなたが期限切れのセッションのために$this->session->userdata('something')
を呼び出すとき、それは単にFALSE
を返します。
したがって、変数がFALSEでないかどうかを確認するのが最善の方法でしょうか?
if($this->session->userdata('userid')){}
//or check it into the model's method, wherever you prefer
ここで、どのような場合は、設計に強く依存しますか。同じチェックをいつでも行う必要がある場合は、ライブラリやモデルの関数にして、コードを一度書くだけでそのメソッドを呼び出すだけでよいでしょう。あなたがコンストラクタに配置することを検討するかもしれない他の何かの前にそれが必要な場合は、@ Jordan Arsenaultが示唆したように、チェックを行う親MY_Controllerを作成し、すべての通常のコントローラで継承します。本当に、これはアーキテクチャに依存し、その答えに十分な情報を提供していませんでした。
すべて私に言えることは、常に、あなたの方法で障害tolerantsを作るあなたのコードの残りの部分を供給する前に、正しい値をチェックしている(期限切れのセッションでは、ワークフローを破った場合)
あなたが期限切れのセッションを復活させるためにクッキーを使用することができますたとえば、ユーザーがアプリケーションにログインするときにユーザーのトークンを作成できます。このトークンには、アプリケーションがグローバルに認識しているトークンが含まれています。セッションが期限切れになったときに、このクッキーが利用可能であるかどうかを確認し、そのユーザーIDでセッションを再作成します。トークンがない場合は、ユーザーに何が起こったかを伝えるページにリダイレクトして、再度ログインするように依頼します。 ユーザーがログアウトすると、トークンとクッキーが削除されます
ええ、クッキーがなければ、上記のコードはおそらくエラー、私はこれが問題の解決策だとは思わない。 – Mischa
クッキーが利用できない場合、またはクッキーがクライアント側で有効になっていない場合は、ユーザーに何が起こったかを伝えるページにリダイレクトして、再度ログインするように要求する必要があります。 – Beatles1692
あなたは正しいです、申し訳ありません。私がコメントした理由は、クッキーのセッションを持続させることは関連しているとは思っていたが、質問には答えなかった。 – Mischa
*私のコントローラの多くは機能を持っています... *はすぐにDRY(自分自身を繰り返さないでください)パラダイムに従っていないことを示唆しています。このロジックを1つの場所に持たせることができます。コントローラーの継承を使用して、Mother Controllerがセッション処理を見て、個々のコントローラーが行う必要がないようにします。 [この投稿を参照](http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-base-Classes-Keeping-it-DRY) –