Ruby on Rails のプラグイン jpmobile を利用して携帯サイトを作成したところ、trans_sid 機能を使っていても DoCoMo の携帯でアクセスするとセッションIDが変わってしまい、セッションデータが維持できない。

One Comment

  1. fumiu says:

    以下のページに原因と解決策がある。

    http://blog.t-4u.net/web/tag/14/article/105

    簡単に抜粋すると、plugin/jpmobile/lib/jpmobile/trans_sid.rb の内容を以下のように変更(10行目)する。

    変更前

    module ParamsOverCookie
      def self.included(base)
        base.class_eval do
          # cookie よりも params を先に見るパッチ
          def load_session_with_jpmobile(env)
            request = Rack::Request.new(env)
            unless @cookie_only
              sid = request.params[@key]
            end
            sid ||= request.cookies[@key]  # ここでsidがnil
    
            sid, session = get_session(env, sid)
            [sid, session]
          end
          alias_method_chain :load_session, :jpmobile
        end
      end
    end
    

    変更後

            #sid ||= request.cookies[@key]
            sid = sid || request.cookies[@key] || request.params[@key]
    

Leave a Reply