テラテイルのマイページ編集のURL[users/setting/profile]は
どのようなテーブル設計で実装されているのでしょうか
私の作ったものだとprofiles/1/editというように
idが表示されているので嫌なので同じような実装をしたいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
セッションにIDを持たせているのだと思いますよ。
投稿2015/03/02 15:16
総合スコア47
0
smithさんが普段お使いになっている方法はGETにてユーザーIDをURLに含めていますよね。
その他で思いつく方法としては、クッキー、セッション、最近であればHTML5の主力の一つとして取り上げられたWeb Storageなどがあるかと思います。
クッキーファイルの中身は決まった形式でデータを保持し、クライアントに保管されます。
クッキーにユーザー情報を保管しても構わないのですが、セキュリティの観点や、取扱いの煩雑さから、重要なデータを持たせるという意味では好ましくありません。
セッションというのは逆に、ユーザー情報はサーバのセッションファイルに持たせ、クッキーファイルにはセッションを開始した際にサーバが発行するセッションIDと自ホスト名等を保持する形式です。
以下のようなフローとなります。
(ログイン認証を例として)
http://localhost/users/login がログイン認証URLとします。
http://localhost/users/setting/ がユーザー情報設定のURLとます。
[クライアント]
サーバにログインページをリクエストします。その際にそのホストのクッキーファイルがあれば、クッキー情報をリクエストヘッダに追加します。
[サーバ]
クライアントのリクエストを受け付けると同時にクッキー変数をチェックします。
サーバ内にそのクッキーと共通のセッションIDをもったセッションファイルがあればそれをチェックします。
セッションファイルの中身はこのようになっています。
キー、値、有効期限、その他
キー、値、有効期限、その他
.
.
.
(その他にはドメインやパス、プロトコルやサイズなども含まれますがほとんどの場合利用に意識する必要はありません)
セッションというのはほとんどの場合、グローバル変数であり、連想配列、またはオブジェクトであることがほとんどです。
配列であれば添え字、オブジェクトであればプロパティが上記キーと考えれば分かりやすいかと思います。
例えばログイン完了時にこのサーバはuser_infoというキーで、ユーザー情報を格納したハッシュを、セッションファイルに追加するとします。
rubyは全くやったことないのですがこんな感じでしょうか?
さらにrailsのMVCにおけるパラメータ取得のルールがよくわからないので適当に読み替えてください;
lang
1# UsersコントローラのLoginアクション(でいいのでしょうか?) 2# 3# メールアドレスやパスワードでDBからユーザー情報を取得 4# 認証に失敗した場合はログイン画面へリダイレクト 5# 6# 以下は成功したとして 7# user_infoをハッシュとしてユーザー情報を格納後セッション変数へ追加 8# 9user_info = { :user_id=>1, :user_name->"hayashi", , , , } 10session[:user_info] = user_info 11
lang
1# Settingコントローラクラス 2# 3# セッションからデータの読み出し 4 5user_id = session[:user_info][:user_id] 6
上記のようにsessionというグローバル変数はrails?が用意しているもので
おそらくPHPのようにsession_startのような明示的な開始記述はいらないのかなと思われます。
これでURLのPathInfoから定数を隠ぺいしていますし、アクション毎に情報を引き継ぐ必要がなくなり、ユーザー情報そのものが、ネットワークを流れることはありません。
(しかしセッションハイジャックというクライアントのセッションIDの乗っ取りによって成り済ましを行うクラック手法もあります)
えらい長くなってしまいましたが「rails session」などで検索していただければ実際の記述は例があると思います。
Rubyの文法は全く無知なのでご容赦願います。
投稿2015/03/05 19:33
編集2015/03/05 19:41総合スコア47
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/03/07 12:38
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/03/05 16:46