CGI ::默認情況下,會話獨立於腳本。所以你應該能夠做到這一點。
只要不忘記以某種方式將會話ID保留在客戶端上。它可以用cookie來完成,例如參見會話header()
。 ID和會話對象將自動檢索(如果保存正確)。
見CGI::Session new()
如果調用時沒有任何參數,$ DSN默認的驅動程序:文件;串行:默認; ID:MD5
和CGI::Session::Driver::file
。
您可以將它們配置爲使用您喜歡的商店和設置。
基本例如 CGI腳本使用會話:
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser); # show errors in browser
use CGI::Session;
# new query object
my $q = CGI->new();
# new session object, will get session ID from the query object
# will restore any existing session with the session ID in the query object
my $s = CGI::Session->new($q);
# print the HTTP header and set the session ID cookie
print $s->header();
# print some info
print "<pre>\n";
print "Hello!\n\n";
printf "Your session ID is: %s\n", $s->id;
printf "This sessin is: %s\n", $s->is_new ? 'NEW': 'old';
printf "Stored session 'test' value: '%s'\n", $q->escapeHTML($s->param('test'));
printf "CGI Params: %s\n", join ', ', $q->param;
# handle the form submit
if(defined $q->param('save')){
# save param value in the session
$s->param('test', $q->param('test'));
printf "Set session value: '%s'\n", $q->escapeHTML($s->param('test'));
}
elsif(defined $q->param('delete')){
# delete session
$s->delete;
print "Session will be deleted.\n";
}
print "\n</pre>\n";
# simple HTML form
printf <<'_HTML_', $q->escapeHTML($s->param('test'));
<hr/>
<form>
Session value "test": <input type="text" value="%s" name="test"/>
<button type="submit" name="save">Save Value</button>
<button type="submit" name="delete">Delete session</button>
</form>
_HTML_
# eof (linebreak needed after _HTML_)
我真的不明白你的意思。你能進一步解釋我可以如何使用header()嗎? – Sakura
@Sakura,在你的CGI腳本中,你可以使用'print $ session-> header();'來代替HTTP頭。這會將會話ID保存爲客戶端上的cookie。 – Qtax
對不起。我還是不太明白。這是如何幫助我將會話ID傳遞給cgi腳本註銷的? – Sakura