5

here の回答に従いましたが、うまくいきませんでした:
ブラウザを閉じた後でもセッションを維持することは可能ですか?

これが私が試したコードです:

$session_life = 2592000; // 30 days
session_set_cookie_params($session_life);
session_name('my_cart');
session_start();
// update the session_life
setcookie(session_name(),session_id(),time()+$session_life);

これに関する問題は、ブラウザーを閉じるたびに、古いものではなく、新しい session_id を取得することです。

データベースを使用してアイテムを「my_cart」に保存しています。session_id は、ユーザーを識別して自分のカートを表示するために使用されます。

ユーザーのカートを 30 日間維持するための最良の方法は何ですか?


これは私が最終的に得たコードです:

$cart_name = "my_cart";
$cart_life = 2592000; // 30 days
session_start();
if (isset($_COOKIE[$cart_name])) {
    session_id($_COOKIE[$cart_name]);
}
setcookie($cart_name, session_id(), time()+$cart_life);
4

1 に答える 1

3

私が書いたサイトで同様のことをしなければなりませんでした (顧客がコードを入力するのに 30 分間かかります)

Cookie を使用するのではなく (顧客が同じブラウザーでサイトに戻ることを保証できないため)、ユーザーの記録に対してコードの有効期限を保存しました。そうすれば、どのブラウザーからページにアクセスしても (モバイルから開始してデスクトップで終了するなど)、常に同時に期限切れになります。

顧客がサイトに戻ってきたら、現在の時刻と有効期限の時刻を比較して、それに応じて行動します

顧客のバスケットを既に保存しているので、レコードに対して有効期限を追加し、顧客が戻ってきたときに比較を実行します。やり方はとても簡単です:

update basket set expiryDateTime=date_add(now(),interval 7 day) where basketID=[xyz]

必要に応じて、MySQL でもう少しトリックを使用して、時刻を標準値 (20:00) に設定することもできます。

于 2012-05-23T13:58:20.420 に答える