2012-03-18 6 views
1

暗号化されたデータベースをデフォルトのセッションタイプとして使用するように私の開発者Kohanaサーバをセットアップしました。また、これをAuthと組み合わせて使用​​してユーザー認証を実装しています。Kohana 3.2 - 新しいページリクエストでデータを失うデータベースセッション

私のユーザーは正しく認証でき、認証キーはセッションに保存されています。私はまた、ログイン手続き中にユーザーのfirstnameとbusinessnameのような追加データを保存しています。

私のログイン機能は、ユーザーのダッシュボードにユーザーをリダイレクトする準備ができたとき、私はできるだけ早く私は別のページにユーザーをリダイレクトするよう$session::instance()->as_array();Array ([auth_user] => NRyk6lA8 [businessname] => Dudetown [firstname] => Matt)

を行うときに、正しく、すべてのデータを見ることができますよ、$session::instance()->as_array();は空です。

Session :: instance()オブジェクトをダンプすると、セッションIDがまだ同じであることがわかります。

データベーステーブルを見ると、セッションレコードが保存されず、セッションテーブルが空です。

私のbootstrap.phpのが含まれています。誰もがいずれかを持っている場合、私は..答えのためのハイとローの見てきた

return array(
    'database' => array(
     'name' => 'auth_user', 
     'encrypted' => TRUE, 
     'lifetime' => 24 * 3600, 
     'group' => 'default', 
     'table' => 'sessions', 
     'columns' => array(
      'session_id' => 'session_id', 
      'last_active' => 'last_active', 
      'contents' => 'contents' 
     ), 
     'gc' => 500,   
    ), 
); 

Session::$default = 'database'; 
Cookie::$salt = 'asdfasdf'; 
Cookie::$expiration = 1209600; 
Cookie::$domain = FALSE; 

を、私のsession.php設定ファイルがどのように見えます提案、私はすべての耳です!

ありがとうございます!

答えて

0

私は一度同じ問題を抱えていました。それは私がいくつかのブラウザ(サファリとFirefox)でログインできるようにしていたし、クロムとインターネットエクスプローラでログインできなかった。

Cookie::$domain = '.domain.tld'; 

チェックを周り:そんなにそれに取り組んおよびデバッグした後、私はそれを修正して働かせた問題は、

Cookie::$domain = 'domain.tld'; 

を設定するのだった見ました。

+0

ありがとうございましたSinan、 はい、私は実際にKohanaフォーラムであなたの投稿を見て、Cookie :: $ domain = FALSEを実装しましたが残念ながらうまくいきませんでした。 私はもともと私の '.domain.tld'で試してみましたが、サーバインスタンスがサブディレクトリにインストールされていて、正常に動作しているかどうかは分かりませんでした。 私は移行サーバーにすぐに導入するつもりですので、まもなくご提案を試すことができます。 あなたのご意見ありがとうございます。このスレッドに私の発見と回答します ありがとうございました! – reado

+0

驚くばかり!暗号化の設定が整理されたので、ドメインを正しく設定することで、すべてのセッションIDを正しく動作させることができました。 すべて正常に動作しています...ありがとうございます!このヒントは私を助けました! – reado

0

configグループパラメータを使用してSession::instance()に電話する必要があります。デフォルトのパラメータは'default'ですが、あなたの場合は - >Session::instance('database')のように呼び出す必要があります。 それとも、EDIT1

return array(
    'default' => array(
    'name' => 'auth_user', 
     ..... 

return array(
    'database' => array(
    'name' => 'auth_user', 
     ..... 

の名前を変更することができます。申し訳ありませんが、私はあなたのbootstrap.phpの設定に注意を払って...しかし、まだ後のあなたは正しい呼び出しリダイレクトすることを確認していませんでしたセッションインスタンス。

Edit2:セッションのwrite()methodをチェックします。私はあなたが必要なものだと思う:)

+0

おかげEGIS .. は、残念ながら、これはまだアップ動作しているセッションに問題が発生したことはありません行なわ。 ベースコントローラーのbefore()メソッドで 'print_r(Session :: instance( 'database') - > as_array());'を入れても、ユーザーが認証したときにデータが取り込まれますが、新しいページ配列は空です。 – reado

+0

私の答え「Edit2」の部分を確認してください:) – egis

0

エラーログを確認してください。

データベースセッション暗号化を使用している場合は、暗号化設定ファイルに「キー」を追加していることを確認してください。

+0

あなたのヒントは間違いなく助けになりました!私のワークフローでは、JSONメッセージを介してカスタムAPIに通信する自分の認証サーバーに接続する独自のAuthドライバを書きました。 私の処理では、私が行ったencrypt.php設定ファイルを作成するのを忘れていましたが、値が私のデータベースに書き込まれます。問題は..私がページ間を移動するたびに、新しいIDを生成し続けます。 もう少しCookie :: $ domainパラメータで遊んでいますが、私のencrypt.phpファイルが存在しないため、間違いなく問題が発生しました。 ありがとう! – reado

0

Session::instance('type')->get()とすると、セッションデータ全体が取得されます。
'type'がMUSTであるか、デフォルトのファイルタイプを取得しています。両方を混在させると、セッション解読エラーが発生します。

私はあなたのすべての設定でsiteConfigファイルを作成することをお勧めします。

はセッションの場合、私はこのようにやった:

Created a config File config/siteConfig.php 

で:

$sessType = Kohana::$config->load('siteConfig')->get('sessionType'); 

今、あなたは常に持っている:

return array('sessionType' => 'database'); 

そして、スタッフとそのロードあなたのセッション:

Session::instance($sessType) 

はあなたが

関連する問題