jquery, sessions & php session_id();


jquery, sessions & php session_id();

我有一个session_id,我用它来识别一个购物篮类型的应用程序中的用户。

session_id作为会话id存储在数据库中。

当我更新购物车时,session_id、product_id和qty存储在Basket表中。

我正在尝试添加一个项目到篮子,然后在屏幕上显示更新的篮子没有使用jquery页面刷新。

我在一个隐藏的html字段存储会话id或有一个更好的方法让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。

我想解决的办法是修复警告是什么,并尝试做正确的事情…

对我的警告信息有什么建议吗?

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]...错误,在脚本中尽可能早地放置此代码片段。

2。- server stuff

// 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,而不是以静态方式存储它,因为此标识符可能被修改,删除等,而用户则需要时间填写表单。
不幸的是,这个缺陷很常见,也很烦人。提交一个表单,而不是被处理,我们被重定向到登录页面,丢失所有发送的数据。

使用下面的JavaScript代码(结合PHP):

<script type="text/javascript">
var sessionid = "<?php echo session_id(); ?>";
</script>
然后在jQuery (AJAX?)调用中使用sessionid变量

您可以使用data-属性:

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

然后在你的jQuery,只需使用$(this).data('sessionid')检索它:

$('#cart-form').submit(function() {
    var session_id = $(this).data('sessionid'); 
    // ... rest of your code here ...
});