3

間違った観点から問題に取り組んでいる可能性があるため、私の手法が間違っている場合は修正してください。

PHPを使用してWebサイトにゲストユーザーを作成しています。誰かが Web サイトにアクセスすると、ゲスト ユーザーが自動的に作成されます。しかし、その人が「通常の」アカウント (非ゲスト) にログインすると、その人がゲスト アカウントで行ったことはすべて新しいアカウントに転送されます。

たとえば、誰かが認証なしで Web サイトにアクセスし、ショップの商品をカートに追加してログインしたとします。古いユーザー (ゲスト) から新しいユーザーにカートのアイテムを転送する必要があります。

しかし、ゲスト ユーザー アカウントにリンクされているすべてのテーブル内のすべての項目を検索し、それらをすべて変更するには、時間がかかりすぎます (そしてリソースを大量に消費する可能性があります)。右?

しかし、私には制約があります!わーい!ゲスト ユーザー ID を更新すると、すべての制約が変更されます。素晴らしい!しかし、それらを別のユーザー ID に割り当てる必要がある場合はどうすればよいでしょうか? どうすればいいですか?

どんな助けでも大歓迎です。

4

2 に答える 2

2

私はそれを管理するためにセッション配列を使用しています。以前はデータベーステーブルを使用していましたが、面倒でした。

ユーザーがログインしている場合は商品をカートに追加し、注文テーブルに挿入し、そうでない場合はセッション配列に追加します。ここで、ゲストがシステムにログインするときに、セッション配列を確認し、それがnullでない場合は、ユーザー注文テーブルにすべてのエントリを追加します。

于 2012-09-21T06:53:32.367 に答える
0

(ログインしたユーザーの)ユーザー行がすでに存在している可能性があるため、提案していることを正確に実行することはできません。唯一のオプションは、提案したように、各テーブルを調べて、そこでUserIDを更新することです。これの実現可能性は、ゲストユーザーとして何ができるかによって異なります。テーブルが1つか2つしかない場合は、このようにしてください。

しかし、すべての問題は、抽象化の別のレイヤーによって常に解決できますよね?別の単一のテーブル(これを「疑似ユーザー」と呼びます)を実際のユーザーテーブルと他のすべてのテーブルの間に配置します。他のすべてをこの新しいテーブルにリンクし、「psuedousers」を使用してusersテーブルにリンクします。ゲストユーザーがログインしたら、pseudousersテーブルのUserIDを変更するだけで完了です。

私が意味するのは:

+ --------- + + ----------- + + ------- +
| ユーザー|----|疑似ユーザー|----| カート|
+ --------- + + ----------- + + ------- +
                   |            
                   | + ------- +
                   | ------------ | ... |
                                + ------- +

ゲストユーザーを作成するときは、UsersとPseudousersに新しい行を作成します。ユーザーがログインしたら、PseudousersのUserIDを更新してそのユーザーを指すようにすると、Usersのゲストユーザー行を安全に削除できます(使用されなくなります)。

うまくいけば、誰かが「疑似ユーザー」よりも良い名前を思い付くことができます。

于 2012-09-21T06:51:49.703 に答える