3

我正在尝试使用 cookie/会话制作一个简单的购物车。根据此代码段,它仅包含 4 个项目,

<form id="form1" runat="server">
    <div style="height: 296px">



        <asp:ListBox ID="ListBox1" runat="server" Height="164px" Width="107px" 
            SelectionMode="Multiple">
            <asp:ListItem>Tyres</asp:ListItem>
            <asp:ListItem>Battery</asp:ListItem>
            <asp:ListItem>Front Glass</asp:ListItem>
            <asp:ListItem>Vanity Mirrors</asp:ListItem>
        </asp:ListBox>
        <br />
        <br />
        Username:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <br />
        <br />
        EMail: 
        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>



        <br />
        <br />
        <asp:Button ID="Button1" runat="server" Text="Submit" onclick="Button1_Click" />



    </div>
    </form>

我正在尝试的是选择所有四个项目,然后单击按钮,它将带我进入下一页输入价格和计算价格,在另一页中我将显示含税总额。我被困在第二页,因为它只显示第一个选择而不是其他三个。下面是第二页的代码:

public partial class confirm : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.Cookies["UserInfo"] != null)
        {
           // TextBox1.Text = Server.HtmlEncode(Request.Cookies["UserInfo"]["userName"]);
            //TextBox2.Text = Server.HtmlEncode(Request.Cookies["UserInfo"]["email"]);
            Label1.Text = Server.HtmlEncode(Request.Cookies["UserInfo"]["items"]);
            Label2.Text = Server.HtmlEncode(Request.Cookies["UserInfo"]["items"]);
            Label3.Text = Server.HtmlEncode(Request.Cookies["UserInfo"]["items"]);
            Label4.Text = Server.HtmlEncode(Request.Cookies["UserInfo"]["items"]);
        }
    }
}

任何想法家伙我可能是错的?

4

1 回答 1

4

将用户添加到购物车的所有项目存储在 cookie 上是一个坏主意,因为 cookie 对您可以存储的数据数量有限制,其次页面在每个请求中都携带所有数据,并且您使页面难以加载.

如果您尝试将其保存在会话中,那么当会话到期时,用户可能会丢失购物车上的内容,即使在结帐时也会发生这种情况。例如,用户开始结帐,停止几分钟做某事,然后当它尝试继续会话时已经过期。

正确的方法是将购物车保存在数据库中,与至少六个月到期的用户 cookie 连接。

关于你的代码

您的代码中的错误是您对所有人使用相同的 cookie 名称,这就是为什么您只看到第一个。看,这是一样的,并没有改变。

Request.Cookies["UserInfo"]["items"]
于 2012-06-02T08:01:47.997 回答