2011-05-14 80 views
2

我在perl上編寫了一個http會話管理器,會話管理器必須向用戶瀏覽器寫入cookie,當我在firefox 4上測試它時,它工作正常,並且cookies被寫入瀏覽器,chrome和IE似乎拒絕cookies出於某種原因,我做了一個invistagation,但沒有用,我的餅乾看起來是這樣的:Perl cookie問題

套裝 - Cookie:session=nSwbgFp5suScOMjmDMVNxv4EQLJpDat7YanRJGfM3hrvbjCCprUvocU4HxiR4Tk_VUAV6hE68zlriRvX0CeC4Ytk1DJc8IhCn_4C;expires=Sat, 14-May-2011 10:10:56 GMT

東西我發現,如果我配置餅乾1天到期。它適用於所有瀏覽器,但一個小時它不適用於IE和Chrome。 如果任何人有關於如何嗅探在IE瀏覽器或鉻瀏覽器的想法,讓我知道。我不是說使用網絡嗅探器。因爲我確信cookie發送給瀏覽器。我的意思是與瀏覽器相關的東西。

在此先感謝。


my ($key, $value) = @_; 
my (@cookies, $k, $v, $r, $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst); 
my @chars = ('a' .. 'z', 'A' .. 'Z', '0' .. '9', '_'); 
my @weekday = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); 
my @month = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'); 
$r = ''; 
foreach (1 .. 100) {$r .= $chars[rand @chars]} 
## Calculate the expiration date of the session 
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = gmtime(time() + $::session_life); 
$year = $year + 1900; 
$mon = $month[$mon]; 
$wday = $weekday[$wday]; 

## Generate cookies 
print("Set-Cookie:$::session_cookie_name=$r;" . "expires=$wday, $mday-$mon-$year $hour:$min:$sec GMT;\n"); 
+0

顯示一些展示問題的最小代碼,以便感興趣的人可以自己重現它。 – daxim 2011-05-17 06:30:48

回答

0
  • 鉻,菜單→工具→開發者工具(按Ctrl + Shift + I)。
  • 在Opera中,菜單→頁面→開發工具→蜻蜓(Ctrl + Shift + I)。
  • 對於Internet Explorer,請參閱Developer Toolbar

的時間計算是錯誤的。使用庫CGI::Cookie生成符合標準的cookie標頭。

use CGI qw(); 
use CGI::Cookie qw(); 

my $cgi     = CGI->new; 
my $session_cookie_name = …; 
my $r     = …; 

print $cgi->header(
    -type => 'text/plain', 
    -cookie => CGI::Cookie->new(
     -name => $session_cookie_name, 
     -value => $r, 
     -expires => '+2h', 
    ), 
); 
+0

感謝Daxim,這不會攔截cookies,這會顯示Cookie被瀏覽器接受。 – 2011-05-15 21:50:30

+0

定義:攔截 – daxim 2011-05-16 07:54:43

+0

Daxim,這將不會顯示cookie來瀏覽器,它只會顯示瀏覽器存儲的cookie,通常他們不在那裏。 – 2011-05-16 20:12:55