Perl CGI :: Session - 将用户会话迁移到新服务器,而不需要他们知道

时间:2015-05-11 23:07:51

标签: perl session cgi

我需要将我们的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。请不要为9y到期而抨击。管理层是"以上"必须登录。 :)

1 个答案:

答案 0 :(得分:1)

  

这是我在" Home"中添加的代码。当前服务器上的脚本..

该部分似乎没有传输用户ID,它也没有使用url (qw/ -full 1 -rewrite 1 /)来检索back =

的网址值

您也可能希望Crypt::CBC用户ID(甚至返回)使用像Session::Storage::Secure这样的rjindel用于Cookie(UTSL)

  

这是新服务器上脚本中的代码......没有cookie。没有会话文件。什么都没有。

我读取你的程序的方式,它应该至少抛出一个错误,因为load不会创建一个会话,它的名为load()不会被称为new。 new将创建一个会话。