免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1865 | 回复: 1
打印 上一主题 下一主题

[求助] CGI动态输出页面出现问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-31 17:01 |只看该作者 |倒序浏览
访问流程是这样的:
第一步: index.pl(若cookie中的Session ID无效或过期,输出填入用户名和密码的页面,会被提交到auth.pl)
第二步: auth.pl(验证并输出验证结果,若成功,则向服务端session中写入登录状态为1,并提供一个到首页的链接,然后客户端点击此链接)
第三步: index.pl(若cookie中的Session ID有效且登录状态为1,则输出一个欢迎界面(不再输出“要求输入用户名和密码”的表单))

问题是当我在第二步验证成功后,点击去往index.pl的链接后,并没有成功输出欢迎界面,看到的仍然是登陆之前的index.pl的样子(一个要求输入用户名和密码的表单),刷新一次页面之后才能看到欢迎界面,请问有没有哪位朋友知道这个问题是什么原因造成的?

  1. # cat index.pl
  2. #!perl
  3. use CGI;
  4. use CGI::Session;
  5. require 'FFF.pl';

  6. my $q = CGI->new;

  7. my $is_logedin = session->is_logedin;

  8. print $q->header (
  9.         -type        => 'text/html',
  10.         -charset=> 'utf-8' );

  11. print $q->start_html(
  12.         -title        => 'Common Financial Statistics System');

  13. if ($is_logedin) {
  14.         print "hello! effectivity code is \"$is_logedin\"";

  15. } else {
  16.         print qq| <form action="auth.pl" method="get">
  17.                         username: <input type="text" name="username"><br>
  18.                         password: <input type="password" name="password"><br>
  19.                         <input type="submit"><br>
  20.                 </form> |;
  21. }

  22. print $q->end_html;
复制代码

  1. # cat auth.pl
  2. #!perl
  3. use CGI;
  4. use CGI::Session;
  5. require 'FFF.pl';

  6. my $q = CGI->new;
  7. my $username = $q->param('username');
  8. my $password = $q->param('password');

  9. if ($username eq 'user' and $password eq 'pass') {
  10.         my $session = session->new;
  11.         $session->param('login', 1);

  12.         $session_id = $session->id;
  13.         $auth_result = $session->param('login');

  14.         print $session->header (
  15.                 -type        => 'text/html',
  16.                 -charset=> 'utf-8' );

  17.         print $q->start_html(
  18.                 -title        => 'index page');

  19.         print        qq|
  20.                 username you submited was: "$username"<br>
  21.                 password you submited was: "$password"<br>
  22.                 authentication result: "$auth_result"<br>
  23.                 vaild session_id: "$session_id"<br>
  24.                 <a href="index.pl">index<a>
  25.                 |;

  26.         print $q->end_html;

  27. } else {
  28.         print $q->header (
  29.                 -type        => 'text/html',
  30.                 -charset=> 'utf-8' );

  31.         print $q->start_html(
  32.                 -title        => 'authentication failed');

  33.         print        qq| authentication failed. |;

  34.         print $q->end_html;
  35. }
复制代码
# 下面这个脚本是我定义的,用来方便重复调用的

  1. # cat FFF.pl
  2. #!perl
  3. # Functions for site.

  4. package session;

  5. # Creating a new session
  6. sub new {
  7.         $session = CGI::Session->new or die CGI::Session->errstr;
  8.         $session->expire(30);

  9.         return $session;
  10. }


  11. sub is_logedin {
  12.         $session = CGI::Session->load or die CGI::Session->errstr;

  13.         $is_logedin = $session->param('login');

  14.         return $is_logedin;
  15. }


  16. 1;
复制代码
另外,不知道这个信息有没有帮助:
在我登陆后,“点击去往index.pl的链接,然后看到登录前的界面(而不是欢迎界面)”这个过程中,我开了抓包,发现服务器并没有给我“输出登录前的页面”,服务器返回的是HTTP代码301

服务器返回的内容为:
  1. <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">\n
  2. <html><head>\n
  3. <title>301 Moved Permanently</title>\n
  4. </head><body>\n
  5. <h1>Moved Permanently</h1>\n
  6. <p>The document has moved <a href="http://10.0.0.9/cfss/">here</a>.</p>\n
  7. </body></html>\n
复制代码
上面这些是报文中的,我在客户端并没有看到这些,看到的是登陆之前的index.pl的输出(并且这个“登陆之前的index.pl的输出”并不是服务器发过来的,是客户端从本地读的缓存,因为报文中,服务器这一次并没有发过来index.pl的输出)

论坛徽章:
0
2 [报告]
发表于 2010-03-31 18:04 |只看该作者
问题很复杂,原因很简单:我把IE浏览器的“Check for newer version for stored pages”设置成了never,改成正常的就好了……晕!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP