2010-12-08 14 views
1

私はデータベースバックアップされたセッションを使用してコードイグナイタープロジェクトをしました。 Webアプリケーションはパスワードで保護されています。つまり、ログインフォームとは別に、ユーザーにページが表示される前にユーザーがログインしているかどうかをチェックする抽象コントローラがあります。コードイグナイター - ログイン後にユーザーをリダイレクトする方法は?

これを実装するのに問題はありませんが、最初にログインする必要があるかどうかを確認したいページにアプリケーションをリダイレクトする方法を理解するのが難しいです。

どのように進む:ユーザーはログアウトし、URLを入力します。アプリケーションは彼がログインしていないことを検出し、ログインページに送り、ci_sessionテーブルに行を作成します。同時に、ユーザーが入力したURLをflashdataまたはuserdataを使用してセッションオブジェクトに格納します。私の問題は、ユーザーがログインすると、データベースに新しい行が作成され、以前に保存した値を完全に無視して新しいセッションが作成されることです。

セッションごとに1行にする必要はありませんか?

+1

Hmm。 [この回答](http://stackoverflow.com/questions/2130361)は、あなたが期待している通りに動作するはずだと示唆しているようですね。 –

答えて

0

はそれを解決しました。

私の問題は、リダイレクトの方法やデータの保存方法ではありませんでした。私の問題は、アプリケーションが要求ごとに2つのセッションを作成することでした。

私は自分のクッキーの名前をアンダースコアとボイルを含まないものに変更しました。 1回のリクエストにつき1回のセッションが必要です。

0

あなたはこのようなことができます。

ユーザーが(このリダイレクトがチェックした後use​​rpage.phpによって行われます

http://test.com/login.php?redirectpage=userpage.php 

に彼をリダイレクトし、彼がログインしていない場合は

http://test.com/userpage.php 

のようなページにアクセスしよう

ログインページの値は「redirectpage」です。ユーザーがログインページにログインすると、以前にログインしたページにリダイレクトされます訪問することを夢見る。

はあなたがログインするユーザーを必要とするすべてのページで、ユーザーのログイン状態を確認する必要があります。

2

CI URLヘルパーは、あなたが使用することができますリダイレクト機能を持っています。 http://codeigniter.com/user_guide/helpers/url_helper.html

指定されたローカルURIに「ヘッダーリダイレクト」しますか。このヘルパーの他の機能と同様に、この機能はサイト内のローカルURLにリダイレクトされるように設計されています。サイト全体のURLを指定するのではなく、指示するコントローラのURIセグメントを指定するだけです。この関数は、設定ファイルの値に基づいてURLを構築します。

オプションの第2パラメータでは、「場所」メソッド(デフォルト)または「更新」メソッドのいずれかを選択できます。場所は高速ですが、Windowsサーバーでは時には問題が発生することがあります。オプションの3番目のパラメータでは、特定のHTTPレスポンスコードを送信できます。これは、たとえば、検索エンジンの目的で301のリダイレクトを作成するために使用できます。デフォルトのレスポンスコードは302です.3番目のパラメータは 'location'リダイレクトでのみ使用でき、 'refresh'では使用できません。例:

if ($logged_in == FALSE) 
{ 
    redirect('/login/form/', 'refresh'); 
} 

// with 301 redirect 
redirect('/article/13', 'location', 301); 
+0

私の問題はリダイレクトされません - 私はそれを簡単に行うことができます。私の問題は、ユーザーがセッションに出ようとしたURLの格納と取得です。 – ruipacheco

+0

あなたの質問の下のコメントにあなたが指摘した答えを見てください。セッションにリダイレクトURLを格納することができます。 –

+0

私は試していますが、セッションクラスはデータベースに2つの行を作成します.1つはログアウトしたときの要求と1つはログインしたときの要求です。セッションからURLを取得しようとすると、空になります。 – ruipacheco

2

ブラウザとWebアプリケーションの間のセッションの仕組みを誤解していると思います。ユーザーがログインページを開くと、codeigniterが追跡している一意のセッションIDが割り当てられます。あなたのセッションが期限切れになった場合、ログアウトするか、自分のセッションの期限切れの設定のために強制的に行うかのいずれかで、codeigniterはデータベース内の一意セッションごとに1行しか書き込まないでください。 config.phpのsess_expiration変数が現実的なものに設定されていることを確認してください。

名前がセッションの一般的な仕組みとは関係がないので、Cookie名からアンダースコアを削除するとこの問題を解決できたことはありません。

+0

私はどちらもしませんでした。この作業をするために変更したコードの唯一のビットは、クッキー名からアンダースコアを削除することでした。 – ruipacheco

関連する問題