我想在我的网站上记录用户会话。我希望只设置一个会话变量。但它的初始化给了我一些问题。
protected void Page_Load(object sender, EventArgs e)
{
if (Session["SESSION_GUID"] == null)
{
Session["SESSION_GUID"] = Guid.NewGuid().ToString();
Response.Redirect(Request.Url.ToString(), true);
return;
}
lnkUpload.Visible = (Session["LOGGED_IN"] != null);
btnLogout.Visible = (lnkUpload.Visible);
}
似乎母版页正在创建变量OK,但其余页面加载(使用该母版页的页面)。所以在我的日志中,我看到两个点击。一个没有设置会话ID,第二个匹配会话ID。
知道为什么这个母版页的子页面加载了两次?这仅发生在对站点的第一个请求上。在那之后,会话工作正常,我们只得到一次。
答案 0 :(得分:3)
内容页面的Page_Load
事件将在主页的Page_Load
之前调用,如ASP.NET Page Lifecycle
主页Page_Init
事件在内容页面Page_Init
事件之前被调用,所以如果你正在做的就是检查Session,最好在Page_Init
处理它主页面和重定向。这可能会导致问题基于项目中其他代码的外观,但从概念上讲,您要做的第一件事就是检查Session并正确处理,因此在处理重定向之前不需要加载页面/控件。
答案 1 :(得分:0)
尝试在母版页中执行Response.End()。这将停止渲染剩余的标记。