C# 单击“登录”时会话变量丢失

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

在第一次访问中,页面加载正在运行,会话存储正确。当我点击“登录”按钮时,再次调用页面加载,然后调用btnSignIn_click函数,但会话为空

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