2

ショッピング バスケット タイプのアプリケーションでユーザーを識別するために使用している session_id があります。

session_id は、セッション ID としてデータベースに格納されます。

カートを更新すると、session_id、product_id、qty が Basket テーブルに保存されます。

jqueryを使用してページを更新せずに、バスケットにアイテムを追加して、更新されたバスケットを画面に表示しようとしています。

セッション ID を非表示の html フィールドに保存するか、jQuery に session_id を認識させるより良い方法はありますか?

更新: わかりましたので、以下の回答とコメントに基づいて、非表示フィールドでセッション ID を使用したくありません。確かに、html ページ内にセッション ID を表示したくありません。

少し遡る必要がありそうです…

ajax が更新バスケット関数を呼び出すと、次のエラーが発生します...

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at ..... /ajaxData.php on line 105

セッションを開始するために使用しているコードは...

if (!session_id()){
session_start();
}

この警告の意味がよくわからないので、非表示の html フィールドを介してセッション ID を送信することを考えていました。

解決策は、警告の内容を修正し、適切に実行することだと思います...

警告メッセージに関する提案はありますか?

4

3 に答える 3

2

IMOのすべてのセッションデータはサーバーで管理する必要があります。フロントエンドで本当に必要な場合は、非同期で取得してください。例えば:

1.-jqueryのもの

$.get(
        window.location.href,
        {
            get_session_id : 1
        },
    function(data) {
    var session_id = data.session_id
    if ("" == session_id){
            // alert user
            // give a friendly way to proceed without loss user's time
            // return;
    }
    // use session_id
}, "json");

更新エラー を回避するためWarning: session_start() [function.session-start]...に、このスニペットをスクリプトのできるだけ早い段階に配置してください。HTML出力の前。

2.-サーバーのもの

// none output before this snippet

if ($_GET['get_session_id'])
{
    // get $session_id
    $output['session_id'] = $session_id ? $session_id : '';
    echo json_encode($output);
    exit;
}

更新2:

このソリューションを提案する理由は、セッションIDを静的に保存するのではなく、必要に応じて動的に取得する方が、ユーザーが変更したり削除したりする可能性があるためです。フォームに記入するのに時間がかかります。
残念ながら、この欠陥は非常に一般的で厄介です。フォームを送信すると、処理される代わりにログインページにリダイレクトされ、送信されたすべてのデータが失われます。

于 2013-01-01T22:43:05.113 に答える
1

この JavaScript コードを (PHP と組み合わせて) 使用します。

<script type="text/javascript">
var sessionid = "<?php echo session_id(); ?>";
</script>

次に、jQuery (AJAX?) 呼び出しでsessionid変数を使用します。

于 2013-01-01T22:18:50.950 に答える
0

You could use a data- attribute:

<form id="cart-form" action="" data-sessionid="<?php echo session_id(); ?>">
    <!-- rest of form code -->
</form>

Then in your jQuery, just use $(this).data('sessionid') to retrieve it:

$('#cart-form').submit(function() {
    var session_id = $(this).data('sessionid'); 
    // ... rest of your code here ...
});
于 2013-01-01T22:24:26.193 に答える