Perl CGI::Session - 在用户不知情的情况下将用户会话迁移到新服务器
Perl CGI::Session - Migrating user sessions to new server, without them knowing it
我需要将我们的 perl 应用程序移动到新服务器,但我不希望每个人在移动时都必须重新进行身份验证。我想让我们的 "Home" 脚本重定向到新服务器,在我更改 DNS 之前为每个用户预先植入一个 cookie,并在 /tmp 中有一个相应的会话文件。
以为这很简单,但事实证明并非如此。那或者我只是在我面前错过了一些东西。
这是我在当前服务器上的 "Home" 脚本中输入的代码..
my $has_session = $cgi->param("session") || "";
if ($has_session eq "") {
my $url = "http://111.222.333.444/cgi-bin/SetNewSession.cgi?back=http://" . "$ENV{SERVER_NAME}" ."$ENV{SCRIPT_NAME}";
print "Location: $url\n\n";
}
这是新服务器上脚本中的代码...
use strict;
use warnings;
use CGI;
use CGI::Session;
use CGI::Carp qw/fatalsToBrowser warningsToBrowser/;
my $cgi = new CGI;
my $userid = $cgi->param("userid");
my $redir_back = $cgi->param("back");
my $session = CGI::Session->load() or die $!;
my $session_userid = $session->param("userid");
if (! defined $session_userid) {
$session->expire("9y");
$session->param("userid",$userid);
$session->flush();
}
my $url = $redir_back . "?session=1";
print $session->header(-location=>$url);
exit;
没有cookie。没有会话文件。没有。
P.S。拜托,不要因为 9 年期满而受到打击。管理 "above" 必须登录。 :)
Here is the code I put in the "Home" script on the current server..
那部分似乎没有传输用户标识,它也没有使用 url(qw/ -full 1 -rewrite 1 /)
来检索 back=
的 url 值
您可能还想Crypt::CBC userid (and even back) using rjindel like Session::Storage::Secure 为 cookies (UTSL)
And here is the code in a script on the new server... No cookie. No session file. Nothing.
我阅读你的程序的方式,它至少应该抛出一个错误,因为 load won't create a session, its called load() its not called new. new 将创建一个会话。
我需要将我们的 perl 应用程序移动到新服务器,但我不希望每个人在移动时都必须重新进行身份验证。我想让我们的 "Home" 脚本重定向到新服务器,在我更改 DNS 之前为每个用户预先植入一个 cookie,并在 /tmp 中有一个相应的会话文件。
以为这很简单,但事实证明并非如此。那或者我只是在我面前错过了一些东西。
这是我在当前服务器上的 "Home" 脚本中输入的代码..
my $has_session = $cgi->param("session") || "";
if ($has_session eq "") {
my $url = "http://111.222.333.444/cgi-bin/SetNewSession.cgi?back=http://" . "$ENV{SERVER_NAME}" ."$ENV{SCRIPT_NAME}";
print "Location: $url\n\n";
}
这是新服务器上脚本中的代码...
use strict;
use warnings;
use CGI;
use CGI::Session;
use CGI::Carp qw/fatalsToBrowser warningsToBrowser/;
my $cgi = new CGI;
my $userid = $cgi->param("userid");
my $redir_back = $cgi->param("back");
my $session = CGI::Session->load() or die $!;
my $session_userid = $session->param("userid");
if (! defined $session_userid) {
$session->expire("9y");
$session->param("userid",$userid);
$session->flush();
}
my $url = $redir_back . "?session=1";
print $session->header(-location=>$url);
exit;
没有cookie。没有会话文件。没有。
P.S。拜托,不要因为 9 年期满而受到打击。管理 "above" 必须登录。 :)
Here is the code I put in the "Home" script on the current server..
那部分似乎没有传输用户标识,它也没有使用 url(qw/ -full 1 -rewrite 1 /)
来检索 back=
您可能还想Crypt::CBC userid (and even back) using rjindel like Session::Storage::Secure 为 cookies (UTSL)
And here is the code in a script on the new server... No cookie. No session file. Nothing.
我阅读你的程序的方式,它至少应该抛出一个错误,因为 load won't create a session, its called load() its not called new. new 将创建一个会话。