我已经对此进行了相当多的测试,我完全感到困惑。ASP.NET_SessionId如果定义Session_Start了MvcApplication类中的方法,ASP.NET 似乎会生成一个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 (?)
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我很困惑,原因有很多:
仅仅存在该Session_Start函数如何足以生成 SessionId?我没有Session在应用程序的任何地方使用该变量,并且该方法为空。
该Session_Start方法是私有的,我显然不会在类内的任何地方调用它,那么 ASP.NET 如何知道会话何时开始?
此类之外的任何东西如何知道该Session_Start方法存在并检查 SessionId cookie?它不是一个部分类,它被明确标记为private。
我知道这些原因相互融合,但我真的不知道这是如何工作的。