2012-01-05 4 views
3

서명 된 쿠키로 작업하는 기본 제공 세션 대신 Mojolicious로 데이터베이스 세션을 사용하려고합니다. startup 서브 루틴에서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 같은 세션 객체를 사용하려고합니다.

불행히도 작동하지 않습니다. - 다른 브라우저의 이전 세션을 사용합니다.

이것은 나를 미치게합니다. 오늘 제가 시도한 것은이 문서를 만들었습니다. 또한 MojoX::Session의 소스와 모든 관련 클래스를 읽을 수 있었고, 시도 할 수있는 방법은 약 923847293847239847 였지만 아무것도 그것을 할 것으로 보인다.

추신 : session 테이블을 db에 만들었습니다.

Mojolicious에서 DB 세션을 사용하려면 무엇을해야하는지 알고 있습니까?

답변

1

$app->session 메서드는 기본 제공 세션을 사용하기 위해 예약되어 있습니다.

Mojolicious helpers을 살펴보고 충돌을 피하려면 다른 메소드 이름을 사용하고 싶을 것입니다.

3

원하는 세션 백엔드를 사용할 수 있습니다. 그냥과 같이 자신의 컨트롤러 기본 Mojolicious에서 파생 된 클래스 :: 컨트롤러 및 재정의 세션을() 생성 :

$self->controller_class('NiceController'); 

: 다음 시작()에 기본으로 컨트롤러 클래스를 설정

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

마지막으로 응용 프로그램 컨트롤러가 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

관련 문제