我需要将我们的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到期而抨击。管理层是"以上"必须登录。 :)
答案 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将创建一个会话。