Javascript 有关ASP.net应用程序中cookie和会话的问题

Javascript 有关ASP.net应用程序中cookie和会话的问题,javascript,asp.net,session,cookies,Javascript,Asp.net,Session,Cookies,我正在编写一个ASP.Net应用程序,允许匿名人士发布祈祷,其他人对这些物品发表评论/确认祈祷。祈祷词以唯一标识符存储在SQL Server 2008数据库中 它们使用repeater控件和隐藏字段显示,以存储行的ID。中继器中的每个项目都包含一个按钮,允许匿名者祈祷,该按钮在数据库中作为计数器递增 基本上,一旦用户确认他/她正在为这个项目祈祷,我想禁用按钮并显示该行的总计数 据我所知,我可以将数据存储在cookie/会话中,因此到目前为止,我能想到的唯一解决方案是将行的ID存储到其中一个对象中

我正在编写一个ASP.Net应用程序,允许匿名人士发布祈祷,其他人对这些物品发表评论/确认祈祷。祈祷词以唯一标识符存储在SQL Server 2008数据库中

它们使用repeater控件和隐藏字段显示,以存储行的ID。中继器中的每个项目都包含一个按钮,允许匿名者祈祷,该按钮在数据库中作为计数器递增

基本上,一旦用户确认他/她正在为这个项目祈祷,我想禁用按钮并显示该行的总计数

据我所知,我可以将数据存储在cookie/会话中,因此到目前为止,我能想到的唯一解决方案是将行的ID存储到其中一个对象中,然后在我的repeater控件中使用自定义逻辑来检查哪些存在

有谁能提供一些见解,以什么最有效的方式来完成这样的事情可能是?如果除了cookie或会话之外还有其他选择,我也很乐意听到

编辑: 我尝试使用以下逻辑实现此解决方案

代码隐藏:

protected bool IsPrayerInCookie(string prayerId)
    {
        if(Request.Cookies["prayers"][prayerId] != null)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
ASPX:


人们为此祈祷。
为这个祈祷吧

然而,这不起作用。有人能帮我弄清楚如何使if语句在aspx文件中工作,以正确地调用具有正确ID的代码隐藏方法吗?

会话将只在用户在站点上时持续。因此,如果他们关闭浏览器并返回,它将消失

Cookie是更好的选择,只有当他们清除Cookie时,这些数据才会消失

如果你不要求用户登录,我想这就是你所能做的

以下是有关Cookie的MSDN页面:

对于实际的cookie存储,我将执行以下操作:

Response.Cookies["prayerlist"][CurrentPrayerItemID].Value = "something"; //All that matters is that they have the cookie with this ID.
Response.Cookies["prayerlist"].Expires = DateTime.MaxValue;
因此,当有人单击添加该项时,您首先要检查他们的cookie中是否已经有该id,如下所示:

if(Response.Cookies["prayerlist"][CurrentPrayerItemID] != null)
{
    Response.Cookies["prayerlist"][CurrentPrayerItemID].value = "something";

    // Add prayer to Database
}
同样,每当绑定中继器时,都会检查cookie。如果他们有那个cookie,你会禁用相应的祈祷按钮

我不知道如何处理这个问题,因为idk如何处理您的绑定,但它看起来像这样:

foreach(Item item in YourListOfItemsThatYouAreBindingToTheRepeater)
{
    if(Response.Cookies["prayerlist"][CurrentPrayerItemID] != null)
    {
        //Disable Button - Set "HasPrayed" = true
    }
}
<asp:Button ID="button1" runat="server" Enabled='<%# !(bool)Eval("HasPrayed") %>' />
要实际禁用该按钮,我要做的是将列表中的值设置为false,然后在aspx页面中执行以下操作:

foreach(Item item in YourListOfItemsThatYouAreBindingToTheRepeater)
{
    if(Response.Cookies["prayerlist"][CurrentPrayerItemID] != null)
    {
        //Disable Button - Set "HasPrayed" = true
    }
}
<asp:Button ID="button1" runat="server" Enabled='<%# !(bool)Eval("HasPrayed") %>' />


使用
!(bool)Eval(“HasPrayed”)
因为如果HasPrayed为true,您希望将enabled设置为false

您可以使用会话来存储用户单击的祈祷项目,但当它们返回到您的站点时,它将忘记之前的所有项目,因为会话已丢失

在这种情况下,您可以使用cookie存储用户单击“我将为此祈祷”按钮的所有祈祷项目ID。如果你不想要求用户登录,我会走这条路


对于您所描述的代码,我认为您可以使用,它将允许您更新/显示为该项目祈祷的人数,并禁用该按钮。

是否要求用户登录此网站?感谢迄今为止的反馈。我已经有了一个工作更新面板,其中存储了对db的proc调用,以在用户单击按钮时更新祈祷次数。唯一的问题是,用户可以无限地坐着,点击按钮,只看数字上升,这有点违背了目的。我已经读过MSDN的文章了。他希望得到一些关于如何实施这种行为的更具体的建议。是否有某种我可以迭代的集合,可以将cookies放在其中?我怎样才能实际地将cookies与转发器项目进行比较呢?我在上面更新了我的答案,补充了一些东西。据我所知,浏览器不共享cookies,所以如果有人使用不同的浏览器,所有cookies都会消失。长话短说,如果你想得到最好/最一致的结果,你必须强迫他们登录。这也将保护你免受垃圾邮件机器人之类的攻击,并通过将他们的祈祷存储在数据库中,让你更容易完成上述任务。太棒了,我将尝试一下,看看效果如何。最终,我肯定会添加成员添加,然后管理类似的东西,这将是一个简单的连接表,但我想保留一个匿名功能,使不想通过注册过程的人更容易访问该网站。目前,我正在为匿名用户实施验证码(captcha),以防止垃圾邮件,并在祈祷词实际发布到网站之前实施一个批准流程。谢谢你迄今为止的帮助