Sessionで値が引き継がれないよ

昨日cgi/sessionを使ってCGI同士の値の引継ぎを行っていた所、
できなくってめちゃくちゃ悩んだ。。。
 
んでも、なんとか解決できた。
 
原因は以下2点。
 

  cgi = CGI.new
  session = CGI::Session.new(cgi)
  session[:hoge] ||= Hoge.new  #←自分で作ったクラスをシンボル:hogeで入れてた

普通のHashと違って:hogeとかシンボルで入れるとだめみたい。
'hoge'をキーにしなくっちゃ。
 

  cgi = CGI.new
  session = CGI::Session.new(cgi)
  session['hoge'] ||= Hoge.new  #←オブジェクトをそのままいれてた。
 fuga = session['hoge'].fuga   #←ここでエラー

オブジェクトをシリアライズせずに入れてた。。。
そのまま入れると、to_sの値が格納されるような感じだった。
 
ちなみにオブジェクトの文字列化はこちら。

  session['hoge'] ||= Marshal.dump(Hoge.new)   #文字列化
  hoge = Marshal.load(session['hoge'])       #オブジェクトに戻す
  fuga = hoge.fuga
  hoge.fuga = "nyannyan"                     #値の設定
  session['hoge'] = Marshal.dump(Hoge.new)   #次からhoge.fugaには"nyannyan"が入っている

Marshalでは文字列化できないオブジェクトもあるので
注意。(とはいえほとんどできますが。。。)