カートデータを永続化するためのユーザー名/ログインがないeコマースサイトでは、PHP $ _SESSION変数またはブラウザCookieを使用して、ショッピングカート内のアイテムを永続化する方がよいでしょうか。クッキーを無効にすることができるので、私は$ _SESSIONに傾いていますが、あなたからの考えを聞きたいです。
よろしくお願いします。
カートデータを永続化するためのユーザー名/ログインがないeコマースサイトでは、PHP $ _SESSION変数またはブラウザCookieを使用して、ショッピングカート内のアイテムを永続化する方がよいでしょうか。クッキーを無効にすることができるので、私は$ _SESSIONに傾いていますが、あなたからの考えを聞きたいです。
よろしくお願いします。
大規模なサイトでは、ユーザーのカートをセッションやCookieに保存することはあえてしません。そのデータは非常に価値があります。
顧客が何を購入しているのか、商品を選択するとき、購入する数、チェックアウトを完了しない理由などはすべて、ビジネスにとって非常に重要です。
データベーステーブルを使用してこの情報を保存し、それをユーザーのセッションにリンクします。そうすれば、情報を失うことなく、戻ってユーザーのカートに基づいて統計を作成したり、チェックアウトプロセスの問題を解決したりできます。
できる限りすべてログに記録します。
以下は、これがデータベースレベルでどのように見えるかを示す簡単な例です。
user {
id
email
}
product {
id
name
price
}
cart {
id
product_id
user_id
quantity
timestamp (when was it created?)
expired (is this cart still active?)
}
カートのリビジョンを追跡できるように、カートテーブルをより多くのテーブルに分割することもできます。
通常のPHPセッションは2つの部分で構成されています
したがって、それは$_SESSION
vsではありません$_COOKIE
-それは$_SESSION
+ $_COOKIE
="セッション"です。ただし、データを含む単一の暗号化されたCookieを使用してこれを変更する方法があります(したがって、データを見つけるために識別子は必要ありません)。もう1つの一般的なアプローチは、データをファイルシステムではなくmemcachedまたはデータベースに保存して、複数のサーバーがデータにアクセスできるようにすることです。
@ Travesty3が言っていることは、2つのCookieを持つことができるということです。1つはセッション用で、もう1つは「ログインしたままにする」Cookie(セッションCookieより長く存在します)または別のCookie内のデータのコピーです。 。
Xeoncrossが指摘しているように、分析のために可能な情報を保存することは非常に重要です。したがって、セッションとCookieに完全に依存するべきではありません。
可能なアプローチは-
ログインしていない場合はセッションを使用する
$_SESSION
ユーザーがログインしていない場合は、PHPを使用して、セッションからカートアイテムとウィッシュリストアイテムを保存および取得できます。
ログイン時にデータベースを使用する
ユーザーがログインしている場合は、2つのオプションのいずれかを検討できます-
ユーザーがログインしたとき
ユーザーがログインしたら、セッションからすべてのカートアイテムとウィッシュリストアイテムを取得し、データベースに保存します。
これにより、ユーザーがログアウトしたりマシンを変更したりしてもデータが永続的になりますが、ユーザーがログインしなくなるまで、情報を永続的に保存する方法がないため、永続的ではありません。
必要なデータの取得
カートまたはウィッシュリストにアクセスしようとしているときはいつでも、次のチェックを行ってください-
SESSIONに保存します。私のウィッシュリストはかなり長く、COOKIEが占有する可能性のある4Kストレージには収まらないのではないかと心配しています。これにより、セッションタイムアウトをより長い期間に設定する必要があります。
注:Cookieに関して非常に厳格なポリシーを採用している国(オランダなど)があり、法律によってセッションの使用を強制される場合があります。
役立ついくつかのポイント:
クッキー:
セッション:
私は中小規模のオーディエンスページを想定しているので、個人的にセッションに参加します。それが大きくなった場合は、このデータを格納するための単純なDB構造と、不要なデータのリッジを取得するためのメンテナンス計画(たとえば、一部の製品を選択するがチェックアウトを行わないクライアント)を使用する方がよいでしょう。
両方の使用を検討してください。
の欠点$_SESSION
は、ブラウザを閉じるとセッションがクリアされることです。
セッションを使用しますが、Cookieが利用可能な場合は、Cookieから$_SESSIONデータを入力してみてください。
私はセッションを使用します。ユーザーがCookieを無効にしている場合、セッションIDはユーザーのマシンにCookieで保存されているため、セッションを開始できません。
セッションをより長く維持するために確認したい設定がいくつかあります。
パラメータを設定session_set_cookie_params()
して実行することにより、ユーザーがブラウザを閉じたときにセッションCookieが削除されないようにします。lifetime
この関数は前に実行する必要がありますsession_start()
session.gc_probability, session.gc_divisor, session.gc_maxlifetime
php.iniでセッションガベージコレクションの設定を変更するか、次を使用して、サーバーからセッションがクリアされる頻度を延長することもできます。ini_set()
サーバー上で他のWebサイトを実行していて、上記のガベージコレクション設定を変更する場合は、それらをphp.iniで設定して、すべてのWebサイトに適用する必要があります。または、使用している場合は、ini_set()
これらのセッションを別のWebサイトに保存することも検討してください。を変更することにより、他のWebサイトよりもディレクトリsession_save_path()
。繰り返しますが、これはの前に実行されsession_start()
ます。これにより、他のWebサイトのガベージコレクションによって、特定の1つのサイトの拡張セッションがクリアされるのを防ぐことができます。
また、php.iniで次のセッション設定を設定することをお勧めしますsession.entropy_file = /dev/urandom, session.entropy_length = 256, session.hash_function = sha512
。これにより、衝突の可能性が非常に少ない、暗号的に強力なセッションIDが得られるはずです。
また、セッションIDに対する中間者攻撃を防ぐために、サイトにSSL証明書があることを確認してください。
明らかに、ユーザーはセッションID Cookieを使用するすべてのCookieを手動でクリアすることを決定できますが、それは私が取る準備ができているリスクです。ショッピングカートシステムの途中でチェックアウトしていなかった場合、Cookieをクリアすることはありませんでした。私はまだセッションが単なるクッキーを使用するよりも優れていると思います。
セッションディレクトリにアクセスできる唯一のWebサイトであり、セッションIDが強力である限り、データは十分に安全です。また、サーバーのセッションストレージ時間を延長することで、データをサーバーに保持できます。
セッションをさらに強力にするために採用できる対策がさらにあります。データをコピーして、20分ごとにセッションIDを再生成します。また、データベースのIPアドレスに対してセッションIDを記録し、特定のIPアドレスが特定の時間にX個を超えるセッションIDを送信しようとしているかどうかを確認し、誰かがセッションIDをブルートフォース攻撃しようとするのを防ぎます。
サーバー上のセッションファイルではなく、セッションIDでリンクされたデータベースにデータを保存することもできます。ただし、これはCookieに保存されているセッションIDに依存しており、いつでも消える可能性があります。ユーザーがカートを紛失しないようにする唯一の方法は、最初にログインしてデータベースに保存することです。