【问题标题】:Get the session timeout value when it's not set in the configuration?未在配置中设置会话超时值?
【发布时间】:2012-02-28 02:29:06
【问题描述】:

我正在实现我的自己的会话提供程序,并且想知道会话提供程序中是否自动设置了默认的 20 分钟?无论配置文件中是否存在条目,是否都提供此值?

如果不是,我的会话提供者应该从其他位置获取它吗?

【问题讨论】:

  • 如果您正在实现自己的会话提供程序,您应该考虑必须查看配置文件以查看默认提供程序是否有任何设置。但是,您应该查看自己的配置(为您的会话提供者)以找出实现的超时时间。
  • 我考虑过,但想知道 20 分钟是默认会话提供程序中的实现细节,还是其他地方可用。

标签: c# asp.net


【解决方案1】:

尝试使用:

System.Int64 timeout = System.Web.HttpContext.Current.Session.Timeout; // The time-out period, in minutes

【讨论】:

  • 当您没有启动当前会话时(例如在应用启动期间),这将引发空引用异常
【解决方案2】:

我在全局配置文件中找不到该值,但它是在某个地方定义的。

使用以下代码,您可以获得会话超时值,无论它是否在本地 web.config 中定义。

Configuration conf = WebConfigurationManager.OpenWebConfiguration(System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath);
SessionStateSection section = (SessionStateSection) conf.GetSection("system.web/sessionState");
int timeout = (int) section.Timeout.TotalMinutes;

【讨论】:

    【解决方案3】:

    在Global.asax中,可以设置

    Session.TimeOut

    在 Session_Start 中或在代码中的其他位置设置。

    【讨论】:

    • 问题是获取值,HttpContext.Session为空。
    • 您尝试过使用 HttpContext.Current.Session 吗?
    • 我实际上有一个实例化的HttpContext 代表当前上下文。因此HttpContext.Current.Session 也是null
    • 请查看此链接:stackoverflow.com/questions/1382791/…。希望对您有所帮助。
    • 我很确定它是在 调用会话提供程序之后构建的。
    【解决方案4】:

    您可以只使用 Session.Timeout 来获取值

    【讨论】:

    • HttpContext.Sessionnull
    【解决方案5】:

    http://msdn.microsoft.com/en-us/library/aa478952.aspx

    根据我上面链接的文章,如果未在任何地方设置超时值,则将使用默认值 20 分钟。自定义提供程序和内置提供程序似乎都是这种情况。

    【讨论】:

    • 我也读过,但我需要当前的超时值,HttpContext.Sessionnull
    • stackoverflow.com/questions/1382791/… 如果 httpcontext.session 为空,则会话对象未启动,没有超时,也没有其他与会话相关的信息。
    • 我很确定它是在 调用会话提供程序之后构建的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多