當我嘗試這樣做:CGI ::客戶端之間的會話共享會話!
while (my $cgi = new CGI::Fast) {
...
my $session = CGI::Session->new(undef, $cgi);
...
}
我發現不同的客戶端都得到相同的會話!什麼會導致這個奇怪的會話分享?
編輯:我無法可靠地重現這一點,但在我的測試中,我看到了從瀏覽器中刪除會話cookie,刷新頁面和(使用Firebug的網絡窗格)的情況,看到我不在請求中發送cookie,但在響應中得到一個Set-Cookie,其中舊的會話ID!由於使用FastCGI,內存中可能存在某些內容?
(注:我取下一個第二一段代碼從這個問題的早期版本,因爲我不再相信這是有關)
編輯:這http://osdir.com/ml/web.fastcgi.devel/2004-02/msg00007.html似乎是描述我的行爲看到
編輯: 如上osdir.com張貼提到的,FCGI.pm包含以下代碼:
for (keys %FCGI::ENV) {
$ENV{$_} = $FCGI::ENV{$_} unless exists $ENV{$_};
}
這似乎很明顯在我眼中有缺陷。只要當前請求沒有爲給定變量提供值,它就會從環境變量的持續副本複製到腳本可見的環境副本中。所以如果一個請求沒有cookie,那麼它就不會找到HTTP_COOKIE定義,所以它會給最後一個發送它們的請求提供cookie,這意味着一些其他會話!我不明白這個代碼可能是正確的,這是一個非常高度使用的模塊!
看着CGI :: Session代碼,很難看出如何纔能有所作爲;你使用的是什麼版本的CGI :: Session? – ysth 2011-05-16 05:32:20
在第一個例子中,在第一個消失的代碼段中,您是否可能意外地爲$ cgi分配了一些內容?如果$ cgi是標量,則其值將用作會話標識,並且這將解釋重複的會話標識。 – 2011-05-16 07:45:39
$ perl -MCGI :: Session -le'print CGI :: Session-> VERSION'給出: 4.43 – JoelFan 2011-05-16 11:02:38