【问题标题】:Return a value to a CGI script将值返回给 CGI 脚本
【发布时间】:2014-12-20 19:00:12
【问题描述】:

在我的主脚本main.cgi 中,我向用户显示form 以进行登录。当这个form被提交时,另一个脚本被调用来执行验证,login.cgi

login.cgi

# Convert request method to Uppercase eg: GET, POST
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;

# If "POST" request sent, check login credentials
if ("$ENV{'REQUEST_METHOD'}" eq "POST"){
    # Get login parameters
    my $username = param('username');   
    my $password = param('password');   

    my $loginCheckResult = check_login($username, $password);

    # If login was successful, create a cookie
    if ($loginCheckResult){
        # Set Cookie
        my $cookie = CGI::Cookie->new(-name=>'USERID',-value=>$cookie_value);       
        print redirect(-uri => '/cgi-bin/main.cgi/', -cookie => $cookie);   


     # If login was Unsuccessful, redisplay the login page
     } else {
          # Do something here...    

     }
 }

如果登录成功,我会创建一个 cookie 并将用户发送回主页。这里可以测试是否存在cookie来判断是否登录成功。

但是,如果登录失败,我不知道该怎么办。

main.cgi

if ($cookie eq ""){
     print show_login_form();
# Login successful
} else{ 
     print $cookie;
}

如果我将它们重定向回main.cgi,登录表单将再次显示,但不会显示错误。如果我在下面包含错误消息

print show_login_form();

那么它将一直显示。有没有办法可以发回一个变量来指示登录失败,然后在main.cgi 中检查这个变量?

或者我应该在登录尝试失败时在login.cgi 中创建另一个登录表单并在此表单中包含错误消息?

感谢您的帮助。

【问题讨论】:

  • 将表单和验证保存在同一个脚本中。这样,当您的验证失败时,您可以返回包含错误消息的相同表单。以下问答演示:Why doesn't CGI::Sessions work?
  • 谢谢米勒。我做了类似于你在这篇文章中所说的事情。

标签: html apache perl cookies cgi


【解决方案1】:

“成功登录”代码路径中的代码是生成登录用户应该看到的页面的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 2023-03-19
    • 2013-09-16
    • 1970-01-01
    相关资源
    最近更新 更多