Rails 2.0はセッションはCookieに入れる、というのを読んで*1Cookie-sessionなんじゃらほい、と思ったのでちょっとソースを見てみました。

「ふつう」セッションに入れるようなちょっとしたデータは4K制限のあるCookieでも十分のはずだよねぇ、ということでセッションにいれる情報をMarshalしてCookieに入れちゃいましょう、というのがこの方式のポイントです。

で、Cookieに入れるっていうとユーザが自由自在にいじれるわけで、信用していいんだっけ?というのが気になったわけです。

見てみた結果はまぁ大丈夫そう。データに突っ込んだ内容とそのdigestの両方をCookieに入れて、受け付けたときはそれを検証するという手順になってるみたいです。digestを生成するときはsecretも必要になりますが、それがconfig/environment.rbで指定することになったアレですね。どこで使ってるのかと思ったらこんなところに。

参考としてソース読んだときの要点を抜き出したつもりなんですが、なんかソースをそのまま乗っけたのと変わんない気がしてきました orz。

いちおう restore => unmarshal => generate_digest => initialize と close => marshal => generate_digest という順番に読むと雰囲気が伝わるんじゃないかと思います。