6

私はショッピングカートを持っているeコマースアプリケーションを作成しています。

私の現在の構造は、ユーザーが製品を保存するたびに、製品をデータテーブルに入れ、データテーブルをセッションに入れるため、セッションがタイムアウトしない限り、ユーザーは保存したリストを取得できます。

ただし、セッションのタイムアウトを 600 分 (10 時間) に増やしましたが、これがショッピング カートの情報を保存するための最善の方法であるかどうかが懸念されます。たとえば、1000 人のユーザーが同時にサイトにアクセスすると、1000 のセッション オブジェクトが作成されるためです。サーバー上で、ウェブサイトのパフォーマンスが低下しませんか。

ユーザーが匿名の場合、ユーザーに関する固有のものがないため、データベースに保存できません。そのように、1000 人のユーザーがサイトにアクセスしている場合、すべての製品がマージされ、取得できません。現在のユーザーが保存した製品。

この問題に対する他のより良いアプローチはありますか。

4

3 に答える 3

27

このように実装するべきではありません。10 時間のセッションは非常に長く、Web サイトに 1000 人のユーザーがいる場合、サーバーが影響を受け、パフォーマンスの問題が発生します。

当社の e コマース Web サイトでは、匿名ユーザー用の Cookie を作成しています。これを行った後、2 つの解決策があります。

  1. バスケット全体を Cookie (基本的には製品 ID + 数量のリスト、ニーズ/戦略に応じてさらに追加) または他の手法 (localStorage など) に保存します。
  2. 一意の ID を Cookie に保存し、一意の Cookie ID を識別子としてバスケットをデータベース (一時テーブル) に保存します。ユーザーがシステムにログインしたら、それらのデータをユーザー バスケット テーブルに移動します。

サーバーの全体的なパフォーマンスに影響を与えることなく、Cookie の有効期限を簡単に変更 (または削除) できます。ID には、 を使用できますGuid.NewGuid()

アップデート:

私の 2 番目のソリューションの詳細 - シナリオ:

  1. ユーザーがウェブサイトにアクセス
  2. 有効期限のない Cookie を作成します: 値を持つ cartId Guid.NewGuid()(名前と値は自由です)。
  3. ユーザーが「購入」をクリック
  4. Cookie サーバー側を取得し、cartId、product/quantity を「AnonymousBasket」テーブルに追加します
  5. ユーザーが Web サイトを離れ、1 か月後に戻ってきた場合、Cookie はまだ残っているとします。
  6. 匿名ユーザーがバスケットに移動すると、Cookie の値に基づいて製品と数量を取得できます。
  7. ユーザーがログオンした場合、Cookie を削除し、データをテーブル "AnonymousBasket" から "Basket" に移動します。
  8. ログインしたユーザーがチェックアウトを処理できるようになりました

このソリューションでは、すべてがデータベースに永続化され、セッションは必要ありません。セッションの場合と同じように Cookie の有効期限を変更できます。代わりに、リスクなしで一時テーブルをクリーンアップしたり、匿名ユーザーに関する統計を作成したりできます (チェックアウトに進まなかった理由、平均でいくつのアイテム、どのアイテム、. ..)。

于 2013-08-22T11:42:35.423 に答える