Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET会话在本地服务器上回发后变为空_C#_Asp.net - Fatal编程技术网

C# ASP.NET会话在本地服务器上回发后变为空

C# ASP.NET会话在本地服务器上回发后变为空,c#,asp.net,C#,Asp.net,以下是我在页面加载时运行的代码: protected void Page_Load(object sender, EventArgs e) { DisableChaching(); if (Request.Cookies["UserName"] == null) { if (Session["UserName"] == null) { Response.Redirect("~/Default.aspx");

以下是我在页面加载时运行的代码:

protected void Page_Load(object sender, EventArgs e)
{
    DisableChaching();
    if (Request.Cookies["UserName"] == null)
    {
        if (Session["UserName"] == null)
        {
            Response.Redirect("~/Default.aspx");
        }
        else if (Session["AccessLevel"].ToString().Equals("2"))
        {
            Response.Redirect("~/Default.aspx");
        }
    }
    else if (Session["AccessLevel"].ToString().Equals("2"))
    {
        Response.Redirect("~/Default.aspx");
    }
    if (!IsPostBack)
    {
        LoadControls();
        BindGrid();
    }
}
有时,当我试图将某些数据保存到数据库时,出现错误,我试图通过单击“保存”按钮来重新保存数据,但出现以下错误:

对象引用未设置为对象的实例

在下面的代码行中:

else if (Session["AccessLevel"].ToString().Equals("2"))
为什么我会犯这个错误

以下是我在登录用户控件中的代码,其中ChR是用于记住用户的复选框:

if (ChR.Checked == true)
            {
                Response.Cookies["UserName"].Value = txtUserName.Text.Trim();
                Response.Cookies["UserName"].Expires = DateTime.Now.AddMonths(2);
                Response.Cookies["AccessLevel"].Value = member.AccessLevel.ToString();
                Response.Cookies["AccessLevel"].Expires = DateTime.Now.AddMonths(2);
                Response.Cookies["FirstName"].Value = member.FirstName;
                Response.Cookies["FirstName"].Expires = DateTime.Now.AddMonths(2);
                Response.Cookies["LastName"].Value = member.LastName;
                Response.Cookies["LastName"].Expires = DateTime.Now.AddMonths(2);
                Session["UserName"] = txtUserName.Text.Trim();
                Session["AccessLevel"] = member.AccessLevel.ToString();
                Response.Redirect("~/Default.aspx");
            }
            else
            {
                Session["UserName"] = txtUserName.Text.Trim();
                Session["AccessLevel"] = member.AccessLevel.ToString();
                Session["FirstName"] = member.FirstName;
                Session["LastName"] = member.LastName;
                Response.Redirect("~/Default.aspx");
            }
在母版页中,我在page_Load事件中以这种方式为会话赋值:

DisableChaching();
    FillInfo();
    if (Request.Cookies["UserName"] != null)
    {
        Session["UserName"] = Request.Cookies["UserName"].Value;
        Session["AccessLevel"] = Request.Cookies["AccessLevel"].Value;
        Session["FirstName"] = Request.Cookies["FirstName"].Value;
        Session["LastName"] = Request.Cookies["LastName"].Value;
        WellCome();
        if (Session["AccessLevel"].ToString() == "1")
        {
            RenderMenu(AcccessLevel.SiteManager);
        }
        else if (Session["AccessLevel"].ToString() == "2")
        {
            RenderMenu(AcccessLevel.Client);
        }
    }
    else if (Session["UserName"] != null)
    {
        WellCome();
        if (Session["AccessLevel"].ToString() == "1")
        {
            RenderMenu(AcccessLevel.SiteManager);
        }
        else if (Session["AccessLevel"].ToString() == "2")
        {
            RenderMenu(AcccessLevel.Client);
        }

    }
    else
    {
        WellGo();
        RenderMenu(AcccessLevel.LogedOutUser);
    }
enter code here
为什么我会犯这个错误


因为
Session[“AccessLevel”]
为空,并且您正试图对空对象调用一个方法。

如下所示替换您的代码

string val = Convert.ToString(Session["AccessLevel"]);
if (val == "2")
{

}
我希望您理解
=
等于()之间的区别


我想我找到了我的会话变为空的原因!当我想在数据库中保存一本书的信息,并在应用程序文件夹中保存该书的图像文件时,我没有保存该文件的权限,我的应用程序会抛出一个错误,并且我的所有会话都会变为空

对于其他用户,请检查会话超时。也许这就是问题所在。您可以使用更改默认超时

<system.web>
   <authentication mode="Forms">
      <forms timeout="50"/>
   </authentication>

   <sessionState timeout="60"  />
</system.web>


你读过这篇文章吗?乔,你以前没有遇到过这样的问题吗?!这可能会让你意识到什么是错的?你看到我的代码有什么问题吗?这是我设置会话值的代码:也许你正在丢失会话,因为应用程序域正在回收@khashayar-请投票并接受正确解决您问题的答案。这也有助于其他面临类似问题的社区用户。@Guest不幸的是,我最近在这个网站注册,我没有足够的声誉来投票!如果你投票支持我的问题,我想我会赢得一些声誉来投票支持答案;)如果会话再次为空,我将在您的第一行代码中得到相同的错误!您可以省略String.IsNullOrEmpty调用,因为在测试'val==“2”
Convert时,空字符串和null值仍将返回false。ToString
将不会抛出错误,如果会话变量中的值为null,则相同的null值将返回到字符串变量。你测试过上面提到的代码吗?根据你的代码,我没有得到我之前提到的错误消息,但仍然有一个问题:我也没有会话值@khashayar-如果要调试,请确保在
global.asax
文件中有
Session\u start和end
事件。这将帮助您追踪实际的根本原因。只需在这两个事件中设置
断点
,即可详细检查此问题的根本原因。这意味着,如果存在任何应用程序错误,会话将变为空!
<system.web>
   <authentication mode="Forms">
      <forms timeout="50"/>
   </authentication>

   <sessionState timeout="60"  />
</system.web>