我有一个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 ...
});