Jun 27

[转]Perl CGI 之Session 不指定

    可以使用 Session 中存储特定用户会话所需的信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。
    Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。

一、在Perl中使用Session
创建Session:

#!/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='2.pl';";
print "</script>;";

读取Session:

#!/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了。

注意,将new session里面第二个参数置为undef,相当于又重建了一次SESSION,跟前一个页面建的SESSION完全失去联系。所以最后得到的f_name值是不存在的。

归根结底,SESSION是可以存储针对与某一个用户的浏览器,以及通过其当前窗口打开的任何窗口具有针对性的用户信息存储机制。
而如果没有将session id互相传递来判断的话是无法得到相应信息的。

二、Session与Cookie
区别:
点击在新窗口中浏览此图片
参考文档:
session和cookie的最深刻理解
session详解
Tags: ,
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]