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 将创建一个会话。