2012-01-05 10 views
3

私は、署名されたクッキーを使用している組み込みのものではなくMojoliciousでデータベースセッションを使用しようとしています。Mojoliciousカスタムセッション

my $dbh = DBI->connect(                                 
         $config->{database}->{dsn},                          
         $config->{database}->{user},                          
         $config->{database}->{password}, 
        ); 

my $session = MojoX::Session->new(
    store  => [dbi => {dbh => $dbh}], # use MojoX::Session::Store::Dbi 
    transport => 'cookie',    # this is by default 
    ip_match => 1 
); 

(ref($self))->attr('session' => sub {     
       return $session; 
       }); 

そして、私は、コントローラ内$self->sessionまたは$self->app->sessionのようなセッションオブジェクトを使用したい:私はのようなものを持っているstartupサブルーチンで

残念ながら、それは動作しません - 以前のセッション(異なるブラウザから)を使用します。

これは私を夢中にさせます - 私が今日試みたのはこの仕事をすることでした - 利用可能なすべてのドキュメント、またMojoX::Sessionのソースとそれに関連するすべてのクラスを読み、それを動作させる方法を試しましたが923847293847239847それは何もしていないようです。

PS:dbにsessionテーブルを作成しました。

MojoliciousでDBセッションを使用できるようにするために私が何をすべきか知っていますか?

答えて

1

$app->sessionメソッドは、組み込みセッションを使用するために予約されています。

Mojolicious helpersを見てください。競合を避けるために、別のメソッド名を使用することをお勧めします。

3

好きなセッションバックエンドを使用できます。ただ、Mojoliciousの::コントローラー由来独自のコントローラの基本クラスを作成し、セッションをオーバーライドする()、そのような:

package NiceController; 
use Mojo::Base 'Mojolicious::Controller'; 
sub session { # custom code here } 
1; 

その後、起動時に()、デフォルトとして、あなたのコントローラクラスを設定します。

$self->controller_class('NiceController'); 

を最後に、アプリケーションコントローラがMojolicious :: Controllerの代わりにNiceControllerを継承していることを確認してください。

オーバーライドされたsession()関数は、将来の混乱を避けるため組み込みのものと同じように動作させることをお勧めします。

5

-xyzあなたはstartup関数内のプラグインとしてアプリケーションにMojoX::Sessionを接続することができます。その後

use Mojolicious::Plugin::Session; 

[...] 

sub startup { 
    my $self = shift; 

    [...] 

    $self->plugin(session => { 
    stash_key => 'mojox-session', 
    store  => [dbi => {dbh => $dbh}], # use MojoX::Session::Store::Dbi 
    transport => 'cookie', 
    ip_match => 1 
    }); 

    [...] 

、あなたは、コントローラで隠しキー「mojox-session」を介してセッションにアクセスすることができます。例えば

$self->stash('mojox-session')->data('something'); 
+0

私は、コントローラ以外の他のファイルでセッションにアクセスするにはどうすればよいです。ありがとう! – PMat

関連する問題