0

我有一个网络服务,我试图用它来创建一个购物车。数据保存在与显示它的网站不同的域中。

我已将服务设置如下:

<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,我现在不关心自己......

4

1 回答 1

0

要在 ASP.NET(和 iis)中保持会话状态,必须正确配置客户端和服务器。ASP.NET 会话状态客户端识别由每个会话 cookie(在每个请求中发送)或无 Cookie完成,并且标识是 URL 的一部分,例如:

http://localhost/(lit3py55t21z5v55vlm25s55)/Application/SessionState.aspx

因此,如果您想避免使用 cookie,则必须配置服务器(web.config - 参见文章)并维护正确的 URL。对我来说,饼干似乎更简单。

于 2013-05-24T21:56:16.033 回答