最近看到很多帖子都是关于Perl CGI Session的使用的,在此算是统一回复罢
正确的代码如下(1.pl)
#!/usr/bin/perl
use CGI;
use CGI::Session;
my $cgi= new CGI;
my $session = new CGI::Session("driver:File", $cgi , {Directory=>;'/tmp'});
my $cookie = $cgi->;cookie(CGISESSID =>; $session->;id );
print $cgi->;header(-cookie=>;$cookie);
$session->;param('f_name', 'Sherzod');
print "<script language='javascript'>;";
print " location.href='http://www.chinaunix.net/jh/25/2.pl';";
print "</script>;";
(2.pl)
#!/usr/bin/perl -w
use strict;
use CGI;
use CGI::Session;
my $cgi = new CGI;
my $session = new CGI::Session("driver:File", $cgi ,{Directory=>;'/tmp'});
my $strName = $session->;param("f_name");
print $cgi->;header();
print "-------------------$strName--------------------\n";
前面的帖子里面主要的问题是认为CGI::Session是可以独立使用的,其实不然,因为我们知道session的两种传递形式就是get url和cookie,因此在第一个页面创建session的时候必须也要将次session id通过url或者cookie传抵给以后的页面,当以后的页面在执行的时候流览器将自动将同一个域的cookie传到服务器上,然后我们利用new CGI可以得到这个session id,因此就可以通过/tmp文件夹下的session文件取到value了
当然,这个例子仅仅演示了coockie session的使用,但是同样有借鉴意义的
在这几天的帖子里面有一位同志错误将new session里面第二个参数置为undef,其实这相当于又重建了一次session,跟前一个页面建的session完全失去联系,所以最后得到的f_name值是不存在的
归根结底,session其实是一个记录了此次会话的一些特有信息的文件(或者数据库行,当使用不同的session driver时),如果没有将session id互相传递来判断的话是无法得到相应信息的
:)
flw 回复于:2005-01-13 15:15:14
请专家鉴定一下,
有望成为精华。
superdoctor 回复于:2005-01-13 15:19:34
谢谢flw
其实也不特别要求,不过看到问的人的确很多,希望加成精华后便于查找罢了
flw 回复于:2005-01-13 15:28:58
可惜我不懂 CGI……
apile 回复于:2005-01-13 15:39:48
不錯呀...很好...
我用perl寫CGI..但是不用CGI pm..:)
也很少用session...
但是看起來應該沒錯....:)
superdoctor 回复于:2005-01-13 15:52:24
:) ,程序我测过,没有问题的,呵呵
Osment 回复于:2005-01-13 18:04:05
支持一把:)
8过如果用文本 Session 的话,建议用Firzen <firzen@perlchina.org>;. 老兄写的DiGiSession,比CGI::Session模块效率高一点。
望尘莫及 回复于:2005-01-14 09:27:14
现在看不懂,先存下来^_^
yzcdf 回复于:2005-01-18 19:19:07
楼上的,好主意,赞成!
| 论坛热门帖子: | [lch203] 写得蛮好的linux学习笔记(10-21) [黑马制造] 学习java的30个目标(10-19) [笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19) [udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18) [沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18) |
| TAG标签: | 要求 回复 cookie print my 一个 可以 session 文件 没有 |
注册
个人空间
