【问题标题】:Perl CGI::Session - Migrating user sessions to new server, without them knowing itPerl CGI::Session - 在用户不知情的情况下将用户会话迁移到新服务器
【发布时间】:2015-07-22 15:08:26
【问题描述】:

我需要将我们的 perl 应用程序移动到新服务器,但我不希望每个人都必须在移动时重新进行身份验证。我想让我们的“主页”脚本重定向到新服务器,预先植入一个 cookie,并在 /tmp 中为每个用户提供相应的会话文件,然后再进行 DNS 更改。

以为会很简单,但事实并非如此。或者我只是在我面前错过了一些东西。

这是我在当前服务器上的“主页”脚本中放入的代码..

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。没有会话文件。什么都没有。

附:请不要因为 9 年到期而受到抨击。管理“高于”必须登录。 :)

【问题讨论】:

  • 您使用的是哪个会话存储驱动程序?

标签: perl session cgi


【解决方案1】:

这是我在当前服务器上的“主页”脚本中放入的代码..

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

您可能还想使用 rjindel Crypt::CBC 用户 ID(甚至返回),就像 Session::Storage::Secure 对 cookie (UTSL) 所做的那样

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

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

【讨论】:

  • 是的!用户 ID 未从“主页”脚本传递。 “如果...”需要创建一个新会话。谢谢@optional。
猜你喜欢
  • 1970-01-01
  • 2012-06-28
  • 2018-10-08
  • 2015-04-27
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
相关资源
最近更新 更多