我有一个页面,我使用cookie存储令牌。
如果找到cookie,页面会加载一个方式, 如果没有,页面将被发送到验证模式。
问题是,如果找不到cookie,并且我将页面发送到auth模式,并且用户点击提交,则十次中有九次在回发时找不到cookie并且用户必须等待第二个或第二个刷新页面,此时找到cookie。
在回发之前,我可以在button_click上等待确认cookie吗?
代码
public HttpCookie Cookie()
{
var cookie = new HttpCookie("testcookie");
cookie = Request.Cookies["testcookie"];
return cookie ?? null;
}
var cookie = Cookie();
if (cookie != null)
{
login.Visible = false;
}
else
{
login.Visible = true;
}
protected void IDButton_Click(object sender, EventArgs e)
{
var newCookie = new HttpCookie("testcookie");
Response.Cookies.Add(newCooke);
}
答案 0 :(得分:1)
我认为您可能遇到ASP.NET's page lifecycle问题。您正在按钮的Click事件上设置Cookie,但此时页面已经加载,并且您的显示内容未更新。
也许您可以将显示代码提取到新方法中,并在按钮的单击事件期间调用该方法。
我在下面添加了一个示例,该页面包含Literal
(如果设置了Cookie,则显示“是”或“否”)以及设置它的Button
;
<asp:Literal ID="LiteralCookie" runat="server" />
<asp:Button ID="ButtonSetCookie" Text="Set cookie" runat="server"
OnClick="ButtonSetCookieClick" />
这是背后的代码;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
UpdateDisplayBasedOnCookie();
}
}
public void UpdateDisplayBasedOnCookie()
{
LiteralCookie.Text = Request.Cookies["TestCookie"] == null ? "No" : "Yes";
}
protected void ButtonSetCookieClick(object sender, EventArgs e)
{
SetCookie();
UpdateDisplayBasedOnCookie();
}
private void SetCookie()
{
HttpCookie myCookie = new HttpCookie("TestCookie");
myCookie.Values.Add("Username", "Matt");
myCookie.Expires = DateTime.Now.AddHours(12);
Response.Cookies.Add(myCookie);
}
通过单击按钮,Literal
从“否”变为“是”,表示它在POST上找到了cookie。我希望这很清楚。
如果我能进一步提供帮助,请告诉我。
马特