我正在尝试使用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"]);
}
}
}
任何想法的人我可能错了吗?
答案 0 :(得分:2)
将一个用户添加到购物车中的所有商品存储在Cookie上是一个坏主意,因为Cookie限制了您可以存储的数据量,其次是页面在每个请求中都包含所有数据并且您创建了页面难以装载。
如果您尝试将其保存在会话中,那么当会话过期时,用户可能会丢失购物车上的内容,即使在结账时也会发生这种情况。例如,用户开始签出,停止几分钟做某事,然后当它尝试继续会话已到期时。
正确的方法是将购物车放在数据库中,与至少有六个月到期的用户cookie连接。
您的代码中的错误是您为所有人使用相同的Cookie名称,这就是为什么您只看到第一个。看,这是相同的,而不是线上的变化。
Request.Cookies["UserInfo"]["items"]