私のアプローチはどうあるべきか少し混乱しています。ショッピングカートのデザインに取り組み、ショッピングカートをセッションまたはデータベースのいずれかに保存する必要がありますが、どちらのアプローチが最適であるかはわかりません。
ユーザーがログインせずにWebショップにアクセスして製品を追加するだけのケースが多く、チェックアウトプロセスに行かなくなる可能性が非常に高いため、最初のケースは私にとってより混乱します。
ただし、このユーザーのショッピングカートを作成する必要があります。ショッピングカートを作成して保存するには、2つのオプションがあります。
データベース駆動のカートシステムとセッションベースのどちらにも、良い面と悪い面がある可能性があることは知っていますが、以下の点を考慮に入れる場合、どちらが最善のアプローチであるかはわかりません
パスを決定するためにこの側面に関する入力を探しています。
最初にサイトにアクセスしたときにすべての訪問者に一意のIDが割り当てられるソリューションを探します。匿名であるか認証されているかは関係ありません。匿名ユーザーが登録するときに、一意のIDを保持します。
ショッピングカートをデータベースに保存します。ストレージは安価であり、カートのクエリを時々実行することはパフォーマンス面で問題になりません。
どちらの方法にも長所と短所がありますが、私の考えでは、データベースストレージには2つのかなり大きな利点があります。
問題は、私のクライアントの市場では必要のないセッションがまったく必要だと想定していることです。私はたまたま数百のeコマースWebサイトを運営しており、そのうちのいくつかは高いトラフィックを得ています。ファームアウトされない限りスケーラブルではないため、セッションが遅くなるか、セットアップがさらに必要になるため、セッションは使用しません。セッションはメモリを使い果たし、データベースのセッション状態のフェッチは非常に遅く、より多くの可動部分が必要です。
代わりに、HTML5 sessionStorageを使用して、何度もプルする必要があるすべてのユーザー情報を永続化しますが、帯域幅を増やすために毎回Cookieを巡回させる必要はありません。これはIE8 +であり、他のすべての最新のブラウザーおよびモバイルデバイスはこの技術と互換性があります。ただし、これは以前に行った方法なので、フォールバックとしてカートをCookieに簡単に保存できます。これが良いcookie-cartです: http://simplecartjs.org/
ユーザーがログインまたはログインするときは、タイムスタンプが組み込まれた暗号化されたCookieを使用します。
リソースとカタログデータさえプリフェッチできるため、アプリケーションキャッシュを適用して、Webトラフィックをサイドノートとしてさらに削減します。これにより、ユーザーの視点は超高速のロードWebサイトとなり、モバイルもオフラインで動作します(トランザクションはマイナスになります)。もちろん、製品が変更されたときなど、マニフェストを更新するように注意する必要があります。
セッションストレージとデータベースストレージは排他的であると想定しています。そうではありません。しかし、それらがそうであると仮定することから始めましょう。
セッションストレージの利点は3つあります。
セッションストレージの欠点:
データベースストレージの利点:
データベースストレージの欠点:
使用しているプラットフォームについては言及していません。私は、要求/応答サイクルの存続期間中、セッションデータがメモリにのみ存在し、それをデータベースからロードしてデータベースに保存し直す、データベースに基づくセッションを使用するアプローチを模索します。これは過去によく役立ちました。
データベースを使用するセッションの利点:
データベースを使用するセッションの欠点:
3番目の可能性があり、誰かが以前に触れました。すべてをCookieまたはhtmlローカルストレージに埋め込むことで、セッションの使用をすべてスキップし、クライアント側のストレージを使用できます。
その長所と短所は演習として残しておきますが、html5ストレージの場合、ブラウザーの互換性を注意深く検討する必要があるかもしれないというヒントをお伝えします。
事実の概要を説明しました。うまくいけば、これはあなたがあなたの状況に適切な決定をするのに役立ちます。
あなたが言及した2つのユースケースを考えてみましょう
ユーザーがログインしておらず、商品をカートに追加していない(匿名ユーザー)
この場合、ユーザーのカート情報をセッションに保存して、セッション中にユーザーに適切にサービスを提供する必要があります。ログイン/アカウントの作成を決定した場合は、次のユースケースに基づいてこれを処理できます。ログインしない場合、データベースはセッション中にゲストにサービスを提供するためにのみ使用されていたため、このゲストユーザーの情報をデータベースに入力する必要はありません。このデータはステートレスベースで処理できます。つまり、セッション間で状態が保存されません。
ユーザーはログインしており、商品をカートに追加しています。
この場合、上記と同じ方法(古い学校のeコマースサイト)で処理し、この情報をデータベースに追加して、ユーザーに関連付けることができます。これは主に、「製品の閲覧履歴」、「推奨事項」など、Amazon.comと同様のステートフル(セッション間で保存された状態)情報を提供するために使用されます。
考慮すべき事柄:
ユーザーがログインしていないときにセッションに移動します。ログインしている場合でも、最初にセッションでカートを作成し、ユーザーがログアウトするかセッションがタイムアウトしたときにのみ、カートをデータベースに保持します。
セッションで作成されるカートの数をチェックする必要があります。