Aというユーザーがログインして、以下の3つから1つをに選択するとします。
・りんご
・みかん
・いちご
そして再ログイン後、選択したものが表示されます。
Bというユーザーのログイン後の画面にはBユーザーが選択したものが表示されているというようにしたいのです。
この場合、それぞれのログインしているユーザーが選んだ情報をテーブルに保存するということになると思うのですが、ログインしているユーザーというのはどうやって渡せばいいんでしょうか?
作っているのは携帯サイトでcookieは使えません。
ユーザーIDをパラメータは渡すのも危険だと思うのですが、どういう実装方法が適切なのでしょうか。
書き方が悪かったようで申し訳ありません。
ユーザIDをセッションに入れる、というのはRails内でのsessionオブジェクトにユーザIDを入れておく、という意味でした。
流れとしては
(1) URL(やcookie)にセッションIDを入れてRailsアプリにアクセスする
(2) RailsではセッションIDをもとにsessionオブジェクトを生成/検索する
(3) Railsアプリからsessionオブジェクトを使用する。Hashのように使える。ここに入れた各パラメータはセッションをまたがって使用することができる。
というようなものになります。つまりjpmobileを使うと、携帯端末からアクセスした場合の(1)と(2)の部分を勝手にやってくれるので、あとは(3) sessionオブジェクトをいじればいい、ということになります。
具体的には
class XxxContrller < ApplicationController # transit_sid # ApplicationControllerでやってるならこちらに書く必要はない def page_1 ... session[:selected_fruit_id] = fruit_model.id end def page_2 selected_fruit = Fruit.find(session[:selected_fruit_id] ... end end
とか。セッションIDのやりとりをアプリケーション側でケアする必要は(たぶん)ないはずです。
とりあえず二つの問題があると理解しました。
1. cookieが使えない状況でセッションを引き回す方法
携帯でCookieが使えないとなると、セッションを引き回すためにセッションID(かさらにそれを識別するための記号)をURLに含めるやり方が多いようです。
で、それを実装するためのプラグインがjp-mobileです。
http://jpmobile.rubyforge.org/
他にも携帯ならではの事情(キャリア判別や絵文字など)のサポートもなされている、おすすめプラグインです。
# こっちの問題が主であれば、質問の頭の方に「携帯で」というのを入れるといいかな、と思います。
2. で、ユーザ管理をどうするか
もしかするとこちらについては悩んでは居ないかもしれませんが、念のため。
ログインしているユーザのIDをセッション(cookieやURLクエリじゃなく)に入れて引き回す方法が多いです。
# で、そのセッションを引き回すのがcookieや上のjpmobileです)
ログイン認証やユーザ管理まわりはacts_as_authenticatedというプラグインが使いやすいかと思います。
ありがとうございます。
セッションIDにユーザーIDを入れて引き回すということですが、jpmobileを使うと「_sission_id」というパラメータに以下のようにセッションIDが入ります。
?_session_id=aaaaaaa
1. これにユーザーID(bbb)を混ぜるということでしょうか?
?_session_id=aaaaaaabbb
2. こうするばあいリンクはどう記述すればいいのでしょうか。
jpmobileはコントローラのapplication.rbに
class ApplicationController < ActionController::Base transit_sid end
「transit_sid」と書くだけでセッションIDは自動で渡してくれるのですが、これにユーザーID(暗号化も必要?)を付加させる方法がわかりません。
コントローラで処理されるのでlink_toで書くと二重で渡されてしまうと思います。
jpmobile側のコントローラを触らないといけなくなりそうです。
また、セッションIDに埋め込んだ場合どうやってユーザーIDを受け取るんでしょうか?セッションIDの値が変更されてしまいそうですが。
無知ですいません。
書き方が悪かったようで申し訳ありません。
ユーザIDをセッションに入れる、というのはRails内でのsessionオブジェクトにユーザIDを入れておく、という意味でした。
流れとしては
(1) URL(やcookie)にセッションIDを入れてRailsアプリにアクセスする
(2) RailsではセッションIDをもとにsessionオブジェクトを生成/検索する
(3) Railsアプリからsessionオブジェクトを使用する。Hashのように使える。ここに入れた各パラメータはセッションをまたがって使用することができる。
というようなものになります。つまりjpmobileを使うと、携帯端末からアクセスした場合の(1)と(2)の部分を勝手にやってくれるので、あとは(3) sessionオブジェクトをいじればいい、ということになります。
具体的には
class XxxContrller < ApplicationController # transit_sid # ApplicationControllerでやってるならこちらに書く必要はない def page_1 ... session[:selected_fruit_id] = fruit_model.id end def page_2 selected_fruit = Fruit.find(session[:selected_fruit_id] ... end end
とか。セッションIDのやりとりをアプリケーション側でケアする必要は(たぶん)ないはずです。
ありがとうございました。うまくいきました。
ありがとうございました。うまくいきました。