[PHP-users 28450] Re: ゲストログインについて

satoshi@try-square.co.jp satoshi @ try-square.co.jp
2006年 2月 17日 (金) 16:10:26 JST


藤本です。

Tadashi Jokagi <ml @ elf.no-ip.org>さん:
>     いわゆる「ログイン手続き」をするとアカウント情報(と必要な情報)だけ
>     書き換えるということにしておけば,実質「常にログインしている」と仮
>     定できるので,いわゆる「ログインしている・していない」という概念は
>     かなり薄くなって実装しやすいんじゃないでしょうか?

その通りですね。
私なら、ユーザ情報テーブルを例えば次のように設計します。

guest_id   テキスト型    サイト訪問時に与えるID
user_id    テキスト型    ログイン時に与えるID(※認証した上で)
page       数値型      閲覧中のページID
cart       数値型      利用中のカートID
items      数値型      選択中アイテムへの参照ID
・・・
その他、ユーザのサイト閲覧状況を記述する全てのデータ

ここで、guest_idとuser_idの区別が重要ですね。
ログインしていても、していなくても、サイト訪問時にまずはゲストIDを
与えてあげます。
そしてユーザがサイト内で何かするたびに、いつでもそれを再現できる程度
の情報を、上記テーブルに記録します。(もちろん、買い物カゴの中身とか)
これは、ゲストIDにひもづいて記録を行います。

ログインが必要な場面になったら、ログインフォームでやり取りしてやる
のは、このguest_idのみというわけです。

ログインに成功したら、そのguest_idのカラムに対してuser_idを与えて
やればいいですね。

> 
> #その guest が複数箇所で同時にアクセスされるということを頭に入れておか
>  ないといけないですけど
> 
> satoshi @ try-square.co.jpさんの「[PHP-users 28448] Re: ゲストログインについて」から
> >大量の情報を、全てそのままGETやPOSTやSESSIONで引き回すべきでは
> >ありません。
> >ユーザの作業情報はサーバ上で常に管理しておき、クライアントとの通信は
> >小さなIDのみにするべきです。
> 
>       SESSION もクライアントとの通信は基本的に小さな ID のみじゃないん
>     でしょうか?

例えば上記でいう、pageやcartやitemsといった全ての要素を
ログイン画面で引き回すべきではないですね、という意味でした。
<input type="hidden" name="page" value="1">
<input type="hidden" name="cart" value="1">
<input type="hidden" name="items" value="1">
・・・
まあPOSTやGETでは丸見えなので、引き回す方法にも工夫が必要です。
いずれにせよ、引き回す情報は最小限にするべきですね。

以上

----
藤本 悟司

株式会社トライスクエア
〒104-0045 東京都中央区築地3-5-13北村ビル2F
TEL: 03-5148-3345 / FAX: 03-5148-3346
Mobile: 070-6668-4644
E-Mail: satoshi @ try-square.co.jp
WEB: http://www.try-square.co.jp/

Key fingerprint = 95F2 6B3D 0B8C 374A 5E67  CA02 F28F 703A C1A9 8346


PHP-users メーリングリストの案内