perl - 在 2 个 cgi 脚本中登录和注销 session

标签 perl session authentication cgi logout

我需要在用户登录时存储一个登录 session ,并在用户退出系统或 session 超时时删除登录 session 。我正在用 Perl 编码。我知道我可以在 Perl 中使用 CGI::Session 模块,但我如何确保 session 由 1 个 cgi 脚本创建并由另一个 cgi 脚本删除。然后系统的所有其他页面必须检查 session 是否存在才能显示其内容。

目前,我正在使用以下代码在用户成功登录后创建一个新 session 。

my $session = CGI::Session->new();
my $CGISESSID = $session->id();

但是,如何在另一个 cgi 脚本中将用户从 session 中注销?我怀疑我是否可以只使用以下内容,因为 $session 未在其他 cgi 脚本中定义

$session->delete();
$session->flush();

有什么想法吗?

最佳答案

默认情况下,CGI::Session 独立于脚本。所以你应该能够做到这一点。

只是不要忘记以某种方式将 session ID 保存在客户端上。可以使用 cookie 来完成,请参阅 session header()例如。 ID 和 session 对象将被自动检索(如果保存正确)。

参见 CGI::Session new()

If called without any arguments, $dsn defaults to driver:file;serializer:default;id:md5

CGI::Session::Driver::file .

您可以将它们配置为使用您喜欢的商店和设置。


使用 session 的基本示例 CGI 脚本:

#!/usr/bin/perl
use strict;
use warnings;

use CGI;
use CGI::Carp qw(fatalsToBrowser); # show errors in browser
use CGI::Session;


# new query object
my $q = CGI->new();

# new session object, will get session ID from the query object
# will restore any existing session with the session ID in the query object
my $s = CGI::Session->new($q);


# print the HTTP header and set the session ID cookie
print $s->header();


# print some info

print "<pre>\n";

print "Hello!\n\n";
printf "Your session ID is: %s\n", $s->id;
printf "This sessin is: %s\n", $s->is_new ? 'NEW': 'old';
printf "Stored session 'test' value: '%s'\n", $q->escapeHTML($s->param('test'));
printf "CGI Params: %s\n", join ', ', $q->param;


# handle the form submit

if(defined $q->param('save')){
    # save param value in the session
    $s->param('test', $q->param('test'));
    printf "Set session value: '%s'\n", $q->escapeHTML($s->param('test'));
}
elsif(defined $q->param('delete')){
    # delete session
    $s->delete;
    print "Session will be deleted.\n";
}

print "\n</pre>\n";


# simple HTML form

printf <<'_HTML_', $q->escapeHTML($s->param('test'));
<hr/>
<form>
Session value "test": <input type="text" value="%s" name="test"/>
<button type="submit" name="save">Save Value</button>
<button type="submit" name="delete">Delete session</button>
</form>
_HTML_

# eof (linebreak needed after _HTML_)

关于perl - 在 2 个 cgi 脚本中登录和注销 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10991156/

相关文章:

asp.net - 身份验证-当项目位于 FormsAuthentifications 下时,单个文件夹(页面)无身份验证

mysql - 没有执行错误的 Perl 提取 - 在执行结束时

php - 登录后如何访问用户信息?

ruby-on-rails - 如何在 Rails/w Devise 中注销时使特定 session 无效?

java - Android 中的 HttpClient 身份验证

java - 两种双向 SSL 身份验证

regex - 检索与 Perl 中所有正则表达式完全匹配的模式

perl - 为什么我的命令行不能从 cron 运行?

arrays - Perl "scalar"函数在空数组上返回 "1"

ruby-on-rails - Rails session ID 为零