Perl CGI 一个简单的用户登录验证应用

本文介绍如何使用Perl CGI脚本实现基于session的登录验证功能。通过两个简单的脚本完成登录验证和后台操作,适用于为特定用户提供安全的数据访问或web操作功能。

工作上需要给其它部门的同事提供一些数据,或者很简单的web操作(类似cms)功能的页面。

刚开始的时候,直接挂到apache下一个页面,通知对方。但是这样没用用户,密码的验证就导致

任何知道这个url的用户都可以操作,访问,不安全。就花了半天研究了一下perl cgi 的基于session的

验证功能。

我这里只简单的做了两个cgi脚本,一个用于登录验证的动作。另一个执行真正的后台操作动作(这个根据不同的业务需求执行不同的操作:如DB,远程ftp等等)

说明一下,我这里只是简单的把用户名,密码放到服务器上的一个文本里,当然可以用不同DB来实现,但原理是一样的。

#!/usr/local/bin/perl
use strict;
use warnings;
use CGI qw(:standard);
use CGI::Session;


my $q = new CGI;

my $method = request_method();
if ($method eq 'POST' ) {
my $u = param('user');
my $p = param('passwd');
my %user;
open F, "<user.list";
while (<F>) {
s/^/s+//g;
s//s+$//g;
my ($a,$b) = (split/:/);
$user{$a} = $b;
}
close F;

if (defined($user{$u}) && ($user{$u} eq $p)) {

my $session = new CGI::Session("driver:File", $q , {Directory=>'/tmp'});
my $cookie = $q->cookie(CGISESSID =>$session->id );
$session->param('u_name', $u);
$session->param('p_pass', $p);
$session->expire('+1h');

print
$q->header(-charset=>'gb2312', -cookie=>$cookie),
$q->start_html(
-title=>'login required',
);

print $q->h1("登陆成功");
print q(<a href="./a.cgi" mce_href="a.cgi">操作</a>);

}
else {
print
$q->header(-charset=>'gb2312'),
$q->start_html(
-title=>'login required',
);

my $rdurl = 'http://myserver/cgi-bin/l.cgi';
print qq{<mce:script language="JavaScript" type="text/javascript"><!--
};
print qq{alert("用户名或密码错误");};
print "window.location=/"$rdurl/";/n/n";
print qq{
// --></mce:script>};
}
print $q->end_html();
exit(0);
}

print
$q->header(-charset=>'gb2312'),
$q->start_html(
-title=>'login required',
);

print "==== 登陆 ===/n";
print $q->start_form(-name=>'l');
print "User Name: ";
print $q->textfield(
-name=>'user',
);
print $q->p();
print "Password: ";
print password_field(-name=>'passwd');
print $q->p();
print $q->submit(
-name=>'sub',
-value=>'提交'
);
print $q->br();
print $q->end_form();
print $q->end_html();

这个文件的功能首先是验证时候登陆,以避免没有登录直接敲url就可以访问到这个功能。

接着进行一些html的操作,如textarea的文本输入等等。这个处理就千变万化了,我们要根据需求实现。

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/Aylazhang/archive/2009/05/12/4170046.aspx

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值