JavascriptからRailsで作成されたセッションデータを取得


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

rails_session_on_javascript_alert

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

rails_session_on_javasceipr_alert_with_base64

ここで問題が、、、

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