こっちが、ほんとの目的。地味に開発を続けている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
# 〜〜 省略 〜〜
