對於項目我使用HTML::Mason
和Apache2 mod_perl2
,我不確定什麼是輕鬆管理會話狀態的好方法。使用html :: mason管理會話狀態
請不要說使用催化劑。我通常會這樣做,但這次不行。
對於項目我使用HTML::Mason
和Apache2 mod_perl2
,我不確定什麼是輕鬆管理會話狀態的好方法。使用html :: mason管理會話狀態
請不要說使用催化劑。我通常會這樣做,但這次不行。
看起來像我已經找到了答案
MasonX::Request::WithApacheSession
與此掙扎了很長一段時間我終於有了一個可行的解決方案後:
這是用mysql存儲會話數據,因此沒有無論您打哪個前端服務器,您都會獲得相同的會話數據。
你需要用這個做了一個表稱爲會話分貝:
CREATE TABLE sessions (id char(32), length int, a_session text);
這是MySession.pm我INC路徑。
package MySession;
use DBI();
use Apache::Session::MySQL;
use Apache2::Cookie;
sub start_session($){
my ($r) = @_;
my $cookie_name = 'mysite-session';
my $cookie_domain = '.mysite.com';
my $dsn = "DBI:mysql:database=db;host=host.com";
my $dbuser = 'admin';
my $dbpass = 'password';
my $dbh = DBI->connect($dsn, $dbuser, $dbpass, {'RaiseError' => 1});
my $session_cookie = Apache2::Cookie->fetch($r)->{$cookie_name};
my %cookie_hash;
if(defined($session_cookie)){
%cookie_hash = $session_cookie->value();
}
tie my %session, 'Apache::Session::MySQL', $cookie_hash{SessionID}, {
Handle => $dbh,
LockHandle => $dbh
};
my $cookie = Apache2::Cookie->new($r,
-name => $cookie_name,
-domain => $cookie_domain,
-value => {SessionID => $session{_session_id}}
);
$cookie->bake($r);
return \%session;
}
1;
然後你想使用/修改會話數據的任何頁面上:
% use MySession;
% my $session = MySession::start_session($r);
% $session->{variable} = "Wow, I have a cookie";
怎麼樣使用舞者? :) – ysth