2009-09-06 47 views
2

我想將一些數據存儲在一個cookie中,我的初始雖然是自己打包的,但後來我想起了有一個一切模塊。我看過StorableFreezeThaw。兩者似乎都是合適的,儘管後者專門提到了字符串,並且似乎將序列化爲沒有換行符的字符串,而Storable創建了一個包含換行符的字符串。我應該使用Storable還是FreezeThaw將Perl數據序列化爲cookie值?

哪個模塊最適合我的應用程序,還是有什麼更合適的?

+0

簡答:不要這樣做。 – 2009-09-08 18:24:22

回答

3

如果將數據存儲在cookie中確實是您想要做的事情,並且會話不合適,我會使用Storable加上MIME::Base64來使數據保持cookie安全。可能在添加Digest::HMAC用於防篡改和/或Crypt::Rijndael以使數據對用戶完全不透明(視情況而定)。

4

出於安全性和兼容性的原因,將大量數據存儲在客戶端Cookie中通常不是一個好主意。相反,我會推薦使用類似CGI::Session的東西,它會給你自動會話cookie,並且你可以將數據存儲在服務器端的表或文件中。那麼使用什麼序列化方法並不重要。

+0

我不打算存儲任何重要數據,只是幾個ID。 – 2009-09-06 06:22:50

+0

在客戶端保持客戶端狀態,在服務器上保持服務器狀態。即使是REST設計也是最好的做法。 – 2009-09-06 10:34:01

2

Storable和FreezeThaw都可以產生不可打印或其他有問題的字符以及換行符。但是大多數將爲您生成並解析cookie標頭的模塊將自動編碼需要它的任何字符,因此您不必擔心它。

但我會推薦存儲更復雜的數據服務器端。

2

我結束了使用可存儲並把它變成一個cookie之前的結果加密:

use CGI::Cookie; 
use Storable qw(freeze); 
use Crypt::CBC; 

my $data = { 
    'ID' => 7, 
    'foo' => 'bar', 
}; 

my $cipher = Crypt::CBC->new(
    -cipher => 'Rijndael', 
    -header => 'none', 
    -key => $key, 
    -iv  => $iv, 
); 

my $enc = $cipher->encrypt_hex(freeze($data)); 
my $cookie = CGI::Cookie->new(
    -name => 'oatmeal', 
    -value => $enc, 
); 
3

真實的數據不要存放在cookie中。存儲一些標識符,允許您在服務器端查找cookie數據。所以,不要使用任何一個模塊。 :)

相關問題