C# 单击“登录”时会话变量丢失
在第一次访问中,页面加载正在运行,会话存储正确。当我点击“登录”按钮时,再次调用页面加载,然后调用btnSignIn_click函数,但会话为空C# 单击“登录”时会话变量丢失,c#,asp.net,C#,Asp.net,在第一次访问中,页面加载正在运行,会话存储正确。当我点击“登录”按钮时,再次调用页面加载,然后调用btnSignIn_click函数,但会话为空 public partial class LoginPage : System.Web.UI.Page { UserItem userItem = null; protected void Page_Load(object sender, EventArgs e) { //Initialize and valid
public partial class LoginPage : System.Web.UI.Page
{
UserItem userItem = null;
protected void Page_Load(object sender, EventArgs e)
{
//Initialize and validate post
RequestObj post = new RequestObj(Context);
if (post.isValid)
{
Session["post"] = post;
}
}
protected void btnSignIn_Click(object sender, EventArgs e)
{
if (Session["post"] != null)
{
RequestObj post = Session["post"] as RequestObj;
userItem = Functions.LogIn(post);
}
Response.Redirect("LogIn.aspx");
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind=" LoginPage.aspx.cs"
Inherits="myNameSpace.LoginPage " %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta name="viewport" content="width=320"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div style="width:100%; text-align:center;">
<%if (userItem == null)
{%>
Username:
<asp:TextBox ID="txtUsername" runat="server"></asp:TextBox>
<br />
Password:
<asp:TextBox ID="txtPass" runat="server" TextMode="Password">
</asp:TextBox>
<br />
<asp:Button ID="btnSignIn" runat="server" Text="Sign In"
onclick="btnSignIn_Click" />
<%}else{%>
<%=userItem.LoginName%>
<br />
<%=userItem.LoginTime.ToString()%>
<br />
<asp:Button ID="btnSignOut" runat="server" Text="Sign Out"
onclick="btnSignOut_Click" />
<%}%>
</div>
</form>
</body>
</html>
用户名:
密码:
您的意思是只在页面最初呈现时设置会话吗
试着像这样包装作业
if(!IsPostBack)
{
RequestObj post = new RequestObj(Context);
if (post.isValid)
{
Session["post"] = post;
}
}
这将防止在回发期间重置
否则,我会在调试器中检查post的值。您的意思是只在页面最初呈现时设置会话吗 试着像这样包装作业
if(!IsPostBack)
{
RequestObj post = new RequestObj(Context);
if (post.isValid)
{
Session["post"] = post;
}
}
这将防止在回发期间重置
否则,我将在调试器中检查post的值No,会话在第一次加载时设置,在第二次加载时,post.isValid为false(这是真的)。但SignIn func中不存在第一个会话!否,会话在第一次加载时设置,在第二次加载时,post.isValid为false(即true)。但SignIn func中不存在第一个会话!您正在页面加载中创建
post
,将其存储在会话中,并在按钮单击事件中检索它?对于此类问题,我更喜欢使用私有变量,并保持会话状态为自由状态。或者您是否需要在会话期间稍后发布post
?对于此类问题,我更喜欢使用私有变量,并保持会话状态为自由状态。或者您是否需要在会话期间稍后发布post
?