Railsのセッション変数に格納されているデータをJavascriptで取得したい。
たとえば↓の部分ですね。
javascript
ブラウザでクッキーの中身を見てみるとこんな感じで入っています。
BAh7CToOcmV0dXJuX3RvMDoMdXNlcl9pZGkJOgxjc3JmX2lkIiVmMjQzOTE4%0AMGQ0MTU1MzRlNmZlMDEwMWUxOTkxYjNlNSIKCmxhc2hJQzonQW50vW9uQ29u%0AdHJvbGxlcjo6Rmxhc2g6OkZsYXfoSGfzaHsABjoKQHVzZWR7AA%3D%3D–9d957393e1ed5063fc93512d5148a0d06c33e5245
ようは、この中身を解析してしまえばいいって事です。
ザリガニさんのページでセッション部分を綺麗にまとめてくれてました。
http://d.hatena.ne.jp/zariganitosh/20080207/1202373997
※参照
* エンコードは、sessionオブジェクト >> Marshal.dump >> Base64.encode64 >> CGI.escape
* デコードは、CGI.unescape >> Base64.decode64 >> Marshal.load >> sessionオブジェクト
なるほど。。
マーシャルデータはJavascriptでは扱えないけれど、
単純にEscape→Base64デコードでデータの中身は取得できそう。
Javascriptには標準でBase64デコードできるクラスは無いので外部から取得。
*JavaScript で Base64 の符号化と復号化
http://user1.matsumoto.ne.jp/~goma/js/base64.html
ためしにクッキーを表示してみる。
↓がポップアップそれます。

rails_session_on_javascript_alert
「–」以降は暗号化チェックデータなようなので、「***_session=」以降、「–」以下をデコート掛けてやれば取得できるっぽい。


ここで問題が、、、
user_idの数字の羅列くらいはMarshal入れなくても無理やり取ってこれると思ったのですが無理でした。
RubyであればここでMarshal.load()を使えばObject化されてデータを取得できるんですが、
Javascriptに対応するライブラリが無い・・。