こっちが、ほんとの目的。地味に開発を続けているSticka.jpの携帯対応の為に必要なので。
AIR版とWeb版を同時にリリースするつもりだったのに、AIRの日本語は相変わらずダメダメなので、とりあえずWeb版ばかり開発が進んでます。
すでに十分使える様になったので、前に登録していただいた人を中心に近々ベータテストを開始します。
このコードはうまく動きません。対応はあきらめました。 (追記 2008/02/03)
さて、このStickaはRails 2.0で作っています。セッションはCookieStore。どうせuser_idしか保存しないしね。
でも、そうするとクッキーを持たない携帯では使えない。それじゃ困る。
という事で書いてみました。jpmobileのtrans sidを使ってCookieStoreをパラメータに保存。
セキュリティ的にかなり微妙なので、使う人は気をつけてください。
とくにリファラーは一発です。
i-modeのブックマークのURLは256文字までらしいので、別に対策が必要です。
jpmobile/lib/jpmobile/trans_sid.rb
# 〜〜 省略 〜〜 class CGI::Session::CookieStore #:nodoc: # ↓追加 def marshaled_data #:nodoc: if defined?(@data) && !@data.blank? updated = marshal(@data) raise CookieOverflow if updated.size > MAX return updated end nil end end # ↑追加 module Jpmobile::TransSid #:nodoc: # 〜〜 省略 〜〜 protected # URLにsession_idを追加する。 def default_url_options(options) return unless request # for test process return unless apply_transit_sid? { session_key => session_id } # 変更 end private # 〜〜 省略 〜〜 # ↓追加 # session_idを返すが、CookieStoreだった場合は、データを返す def session_id session.dbman.is_a?(CGI::Session::CookieStore) ? session.dbman.marshaled_data : session.session_id end # ↑追加 # session_idを埋め込むためのhidden fieldを出力する。 def sid_hidden_field_tag "<input type=¥"hidden¥" name=¥"#{CGI::escapeHTML session_key}¥" value=¥"#{CGI::escapeHTML session_id}¥" />" # 変更 end # 〜〜 省略 〜〜