我有一个网络服务,我试图用它来创建一个购物车。数据保存在与显示它的网站不同的域中。
我已将服务设置如下:
<System.Web.Script.Services.ScriptService()> _
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class shoppingCart
Inherits System.Web.Services.WebService
<WebMethod(True)> _
Public Function addToCart(itemId, qty, singlePrice, singleWeight, isBulk, apiKey)
''' do stuff
Dim shoppingCart = Session("hgPublicCart")
if shoppingCart is nothing then
'' make shopping cart
else
'' add to shopping cart
end if
return shoppingCart
End Function
使用此 AJAX 调用:
$(document).on('click', '.buyButton', function () {
// GET DATA OBJECT
$.ajax({
url: url,
crossDomain: true,
data: data
type: "POST",
contentType: "application/json; charset=utf-8",
success: function (data) {
// DO STUFF
}
});
});
我能够成功单击“立即购买”按钮,将商品信息发送到 Web 服务,并创建一个新的购物车,然后通过远程服务器上的数据将其返回给浏览器并相应地更新我的页面。
但是......如果我然后尝试“购买”第二个项目以添加到购物车中,该项目作为远程服务器上的会话变量保存,我只需创建另一个新项目,我的购物车中的前一个项目就会丢失.
我可以看到为什么会发生这种情况,我认为,会话 ID 没有在 AJAX 调用中得到维护,但我不知道如何修复它。
本页: http: //www.codeproject.com/Articles/35119/Using-Session-State-in-a-Web-Service
作为谷歌上最有用的链接出现,但它没有使用 AJAX 发布,即不是完全客户端发布到远程服务器,它是在客户端服务器上创建会话/cookie。可能无论如何我都必须走那条路,但如果有人能指出示例代码的方向以在远程服务器上使用会话状态,那就太好了。
我不想使用 Javascript Cookie。
编辑:请注意,我知道这不适用于< IE10,我现在不关心自己......