4

署名付き Cookie を使用する組み込みセッションではなく、Mojolicious でデータベース セッションを使用しようとしています。

startupサブルーチンには次のようなものがあります。

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

残念ながら、これは機能しません。以前のセッション (異なるブラウザーからのもの) を使用します。

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

PS:sessionデータベースにテーブルを作成しました。

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

4

3 に答える 3

6

MojoX::Session関数内のプラグインとしてアプリケーションに接続できstartupます。

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その後、コントローラーのstash キー ' ' を介してセッションにアクセスできます。

例えば:

$self->stash('mojox-session')->data('something');
于 2012-01-18T01:48:17.117 に答える
4

好きな種類のセッション バックエンドを使用できます。次のように、Mojolicious::Controller から派生した独自のコントローラー基本クラスを作成し、session() をオーバーライドするだけです。

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

次に、startup() で、コントローラー クラスをデフォルトとして設定します。

$self->controller_class('NiceController');

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

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

-xyz

于 2012-01-05T18:09:24.597 に答える
1

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

Mojolicious ヘルパーを調べて、おそらく競合を避けるために別のメソッド名を使用する必要があります。

于 2012-01-05T14:12:27.783 に答える