Beyond です。

まず確認しておきたいのですが、「cookie の文字列を escape すべきか否か」
では無く、「ライブラリが、cookie の文字列を escape すべきか否か」を問題
にしています。

で、

> >   // Must escape the value and date in case they have spaces
> >   // and/or commas
> >   var s = name + "=" + escape(value) + ";expires=" + escape(nextyear.toGMTString());
> > 
> >   doc.cookie = s;
> > }
> 
> World Wide Web Consortium のサンプルで Must escape となっている、とい

とのことですが、cgi.rb の動作は、この仕様にはしたがっておりません。

1. expire= に与える文字列は escape されていない
2. name= に与える文字列は、escape されていない場合がある

1はともかくとして、2の場合は、
  cookie = CGI::Cookie::new( {"name" => "name", "value" => [ p1, p2 ] )
とした時で、
  escape( value.to_s )
では無く、
  escape( p1 ) + '&' + escape( p2 )
となります。

つまり、「英数字と -_.」以外の文字が HTTP ヘッダに渡される場合があるので
す。

他のブラウザなどの現状を無視して、"must escape" だからと言うことなら、1・
2は問題ですし、他の CGI との連携などを考えようとすると、自動的な escape 
は、やりすぎだと思います。

---------------------
Beyond