【问题标题】:Why can't I read session variables为什么我不能读取会话变量
【发布时间】:2013-03-21 23:12:53
【问题描述】:

我有一个 c# .net Web 应用程序。我创建了会话变量,但是当我离开创建它们的页面后尝试读取它们时,我不能。

在第 1 页创建

Session["UserName"] = "WhatEver";

那我做

Response.Redirect("~/whatever.aspx"); 

并在新页面的Page_Load方法中尝试读取读取会话变量

string userName = Session["UserName"].ToString();

我收到Object reference not set to an instance of an object.

为什么我会收到这个错误,我可以做些什么来解决这个问题?

【问题讨论】:

  • 试试这个 Response.Redirect("~/whatever.aspx",false);
  • 检查您在 page2 或母版页上附加的 global.asax 或其他用户控件,您在哪里使用了“Session.Abandon”
  • 此链接解释了为什么 response.redirect 会导致会话值丢失 - weblogs.asp.net/bleroy/archive/2004/08/03/…2800_or-do-it-right_2900.aspx
  • 你确定包含Session["UserName"] = "WhatEver";的代码是在page1中执行的吗?
  • @Krishna,您的链接已损坏

标签: c# asp.net session


【解决方案1】:

这可能会有所帮助:

Response.Redirect("~/whatever.aspx",false);

来自this article

这不会中止线程并因此保存会话令牌。实际上,这个重载是 RedirectFromLoginPage 在内部使用的。

【讨论】:

  • @MartyGoetz 是否能够在重定向之前在同一页面上检索会话值?
【解决方案2】:

可能是sessionState 在您的config 文件中被关闭

<sessionState mode="Off/> 

更改为 InProc [取决于]

<sessionState mode="InProc" timeout ="60" />

【讨论】:

  • 我检查了 web.config 并没有设置“seesionState”。我还尝试将 添加到 web.config。还是没有运气。
【解决方案3】:

我遇到了完全相同的问题,我设法克服了这个问题,但坦率地说,我不理解 100% 的解决方案,无论如何,我所做的是从“添加新项目”菜单。只需将以下代码复制粘贴到您的全局文件中。这个文件里面的代码如下:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;

using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace ENTER_YOUR_NAMESPACE
{
    public class Global : System.Web.HttpApplication
    {
        void Application_Start(object sender, EventArgs e)
        {

        }

        void Application_End(object sender, EventArgs e)
        {
            /* Code that runs on application shutdown */
            Session_End(sender, e);
        }

        void Application_Error(object sender, EventArgs e)
        {

        }

        void Session_Start(object sender, EventArgs e)
        {

        }//end void Session_Start

        void Session_End(object sender, EventArgs e)
        {

        }//end void Session_End

    }//end class Global
}//end namespace

【讨论】:

  • 请随意对上面的代码做任何调整,如果你弄清楚它到底做了什么,请告诉我,因为正如我之前所说,我并不完全理解解决方案的逻辑!!
猜你喜欢
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
  • 2014-08-23
  • 1970-01-01
相关资源
最近更新 更多