gpt4 book ai didi

c# - 如果定义了 Session_Start,ASP.NET 如何知道创建 ASP.NET_SessionId cookie?

转载 作者:行者123 更新时间:2023-11-30 16:06:54 27 4
gpt4 key购买 nike

我已经对此做了相当多的测试,但我感到非常困惑。如果定义了 MvcApplication 类中的 Session_Start 方法,ASP.NET 似乎会生成一个 ASP.NET_SessionId cookie,即使我没有在任何地方使用 Session 变量。这似乎很奇怪,考虑到方法的主体中不需要任何内容​​。

示例(Global.asax.cs):

using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace MyApplication
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}

private void Session_Start() { } // this is all it takes to generate a SessionId (?)
}
}

现在,我因多种原因感到困惑:

  1. 仅仅存在 Session_Start 函数如何足以生成 SessionId?我没有在应用程序的任何地方使用 Session 变量,而且该方法是空的。

  2. Session_Start 方法是私有(private)的,显然我不会在类中的任何地方调用它,那么 ASP.NET 如何知道 session 何时开始?

    <
  3. 这个类之外的任何东西怎么知道 Session_Start 方法的存在,并检查 SessionId cookie?它不是分部类,并且明确标记为 private

我知道这些原因有点相互融合,但我真的不知道这是怎么回事。

最佳答案

Session_Start 就像应用程序的事件处理程序。创建新 session 时,应用程序会调用此方法。它不创建 session ID,它是开发人员了解用户何时首次访问该站点(该 session )的一种方式。这可用于运行一些初始化例程或跟踪目的(例如,我们今天有 x 个唯一 session )。

触发 Session 和 SessionID 创建的是用户访问启用了 session 的页面——ASP.NET 将在幕后创建 Session。这个问题的答案有两种启用页面 session 状态的方法:Session state can only be used when enableSessionState is set to true either in a configuration

总结:

在 web.config 中,对于所有页面:

<system.web>
<pages enableSessionState="true" />
</system.web>

在您的 page.aspx 中,基于每页(将其设置为 false 以基于每页将其关闭):

<%@Page enableSessionState="true"> 

您的 web.config 还应该配置 SessionState 模式。这是使用服务器内存存储 session 状态的示例:

<sessionState cookieless="false" mode="InProc" timeout="20" />

关于c# - 如果定义了 Session_Start,ASP.NET 如何知道创建 ASP.NET_SessionId cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31596452/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com