對於一個任務,我正在構建一個以用戶登錄開始的Web應用程序。創建登錄會話後,但刷新後會創建新的會話標識,因此狀態沒有被保存。我讀過關於使用POST-REDIRECT-GET方法不重新提交登錄表單的問題,我正在嘗試使用我的腳本執行此操作。也許我誤解了如何以及重定向到什麼,但下面的代碼不起作用。這是用戶通過身份驗證後運行的子例程。任何錯誤的想法?Perl:302重定向到另一個cgi腳本
sub send_to_main {
my $session = new CGI::Session(undef, undef, {Directory=>'/tmp'});
$session->expires('+1d');
my $cookie = $q->cookie(
-name => 'jadrn015SID',
-value => $session->id,
-expires => '+1h');
print $q->header(-cookie=>$cookie);
my $sid = $session->id;
$session->param('user',$user); #added to make session more unique
print $cookie;
print $q->redirect(
-uri=>"http://jadran.sdsu.edu/perl/jadrn015/proj1_scripts/main_app.cgi",
-status=>302,
-cookie=>$cookie
);
編輯: 我收到302消息從服務器返回,但它被印到我的html文件(我知道這是因爲我打印頭我做的重定向之前)。不過,如果我刪除
print $q->header(-cookie=>$cookie);
然後沒有什麼作品,在登錄後,我的瀏覽器或者說,文件找不到,或者嘗試下載該腳本。
你是什麼意思*「不工作」*?您的瀏覽器是否收到302消息?什麼是'$ q'? – Borodin
$ q =新的CGI; 當我取消註釋行「#print $ q->標題(-cookie => $ cookie);」該頁面可以工作,但是重定向被打印到html文檔上(因爲它不再是第一個標題)並且它會顯示「確定文檔已經移到這裏」並且帶有鏈接。但是如果行「#print $ q-> header(-cookie => $ cookie);」被註釋掉了,當用戶登錄時它會嘗試下載cgi文件......很奇怪。 perl非常新,所以我不知道發生了什麼事情!感謝您的迴應。 @borodin – Ybarra
從[手冊](https://metacpan.org/pod/distribution/CGI/lib/CGI.pod#CGI.pm-HAS-BEEN-REMOVED-FROM-THE-PERL-CORE):* CGI .pm不再被認爲是開發Web應用程序的好習慣,包括快速原型開發和小型Web腳本。在這個時候,有更好,更清潔,更快,更簡單,更安全,更可擴展,更可擴展,更現代化的替代方案。這些將通過[CGI :: Alternatives](https://metacpan.org/pod/CGI::Alternatives)進行記錄。* – Quentin