23

私はショッピングカートを含むウェブサイトを作成中です。2つの主要な要件があります。

  1. ユーザーエクスペリエンス担当者は、ログイン/認証がワークフロー全体の最後のステップになることを望んでいます。ユーザーはすべての買い物をすることができ、チェックアウト時にのみログインするように求められます。

  2. ユーザー(登録されているかどうかに関係なく)がチェックアウトしない限り、ショッピングカートは(ブラウザを閉じていても)期限切れにならないようにする必要があります。

上記のコンテキストでは、カートの状態を維持することに関して、次の質問があります。

ファイルベースまたはデータベースセッションを使用する必要がありますか?これは未登録のユーザー向けであることに注意してください。私の不安は、データベースにたくさんのレコードが残ってしまうことです。

別のオプションは、カートの内容を暗号化されたCookieに入れることのようですが、Cookieファイルにはサイズ制限があります。

この場合、あなたはどうしますか?本当によろしくお願いします。

4

6 に答える 6

16
  1. ユーザーの追跡。有効期限がn年のCookieにエンコードされたGUIDを使用します 。

  2. ショッピングバッグの保管。主にサイズが大きいため、バッグをCookieに保存する必要はありません。これにより、メディアに永続化してメディアから取得するオプションが残ります。これにデータベース以外のものを使用することは、過去にさかのぼるようなものであり、データベースはデータの保存と取得に優れています。

  3. あなたの買い物袋を管理します。さて、スキーマの問題です。まず、データベース内のショッピングバッグに対してクエリを実行するかどうか(つまり、アイテムxが含まれるショッピングバッグの数))おそらく、従来のリレーショナルスキーマが必要です。ただし、これには挿入に関してオーバーヘッドがあります。バッグデータの更新、選択(および結合)、および削除(ある時点で、二度と使用されることはないが、貴重なディスクスペースを占有しているバッグがあります)。忙しいサイトでは、これは1秒あたりのトランザクション数がかなり少ないですが、どのデータベースでも対応できるはずです。データベース内の買い物袋を照会する必要がない場合は、XMLとして保存できます。バッグをシリアル化してテーブルにダンプするだけです。PKはユーザーのCookieに保存されているGUIDとして使用されます。これは、従来のスキーマよりもはるかに高速です。さらに、リレーショナルスキーマの要件が発生した場合は、将来的にXMLをいつでも分解できます。

これが私たちの仕事(Xml Bag)であり、100万を超える顧客ベースがあります。

于 2009-09-03T23:00:26.353 に答える
7

私は、ファイル管理セッションよりもデータベース管理セッションを使用します。最終的に古いセッションを強制終了できるように、セッションのタイムスタンプがあることを確認してください(12か月経過している場合、買い物客は元々カートに入っていたアイテムを求めて戻ってこない可能性があります)。

ファイルの代わりにデータベースを使用してこれを行うと、非常に古い情報を最終的に期限切れにすることが容易になります。

データベースセッションは、ユーザーのコンピューターでCookieが関連付けられている場合にのみ有効であることに注意してください。ユーザーが別のブラウザからストアに戻った場合、セッションは見つかりません。2人が同じコンピュータを共有している場合、彼らお互いのセッションを見つけます。うまくいけば、潜在的に恥ずかしいアイテムがカートに入らないでしょう...

于 2009-09-03T22:41:41.343 に答える
1

データベース内のショッピングカートを関連付けるAnonymousSessionIDをCookieに保存します。

次に、しばらくすると(たとえば、1日)匿名セッションを消去するスケジューラタスクがあります。これにより、データベースで放棄されたセッションがなくなります。

ユーザーが登録すると、ショッピングカートをアカウントに永続的に関連付け直します。ユーザーが注文した場合は、ショッピングカートを空にします。

于 2009-09-03T22:41:47.630 に答える
1

ASP.NETを使用している場合は、次のようにします。

  • プロファイルを使用して、ユーザーの電子メールをできるだけ早くキャプチャします(注文を完了しなかった場合に電子メールを送信します)。ユーザーが実際に実際に登録していない場合でも、aspnetデータベースに永続化される匿名プロファイルプロパティを有効にできます。
  • 注文を表すXMLバッグをセッションに貼り付けます。これは、通常のIDIDを使用してデータベースに保持されます。
  • カートのIDをASP.NETプロファイルに保存します。そうすれば、セッションの有効期限が切れたときに、プロファイルのIDからセッションをリロードできます。これには、ユーザーがCookieにカートIDを表示することがなく、メンバーシップ/プロファイルデータベースと注文に使用しているストアの間でレコードを簡単にリンクできるという利点があります。

(XMLの順序をプロファイルに保存しようとしないでください。パフォーマンスの問題を求めていると思いますが、理論的には推測できます)

于 2009-10-24T23:02:12.343 に答える
0

これらの仕様では、データベースベースのセッション状態を使用します。ただし、選択したWebサーバーでセッション状態がどのように処理されるかについては、よく読んでおく必要があります。正しい人に状態を復活させたいので。

于 2009-09-03T22:42:54.633 に答える
0

管理することへの期待があるか、要件が明確ではなかったと思います。

  1. ユーザーエクスペリエンス担当者は、ログイン/認証がワークフロー全体の最後のステップになることを望んでいます。ユーザーはすべての買い物をすることができ、チェックアウト時にのみログインするように求められます。
  2. ユーザー(登録されているかどうかに関係なく)がチェックアウトしない限り、ショッピングカートは(ブラウザを閉じていても)期限切れにならないようにする必要があります。

具体的には、ログインしていない匿名のユーザーのカートが保存されていますか?それは狂気です。それが期待ではないことを確認し、設計ドキュメントで明確にします。

于 2009-10-24T23:08:34.577 に答える