ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-11-20 01:08:56  阅读:469  来源: 互联网

标签:session-cookies session c asp-net-mvc


我已经对此进行了大量测试,但我感到非常困惑.如果定义了MvcApplication类中的Session_Start方法,即使我没有在任何地方使用Session变量,ASP.NET似乎都会生成一个ASP.NET_SessionId cookie.考虑到方法的主体中没有任何东西,这似乎很奇怪.

范例(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 (?)
    }
}

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

>仅使用Session_Start函数足以产生SessionId吗?我没有在应用程序中的任何地方使用Session变量,并且该方法为空.
> Session_Start方法是私有的,并且我显然不在类内的任何地方调用它,因此ASP.NET如何知道会话何时开始?
>此类之外的任何东西怎么都不知道Session_Start方法存在,并检查SessionId cookie?它不是局部类,并且已明确标记为私有.

我知道这些原因相互融合在一起,但是我对此确实感到茫然.

解决方法:

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

触发创建Session和SessionID的原因是用户访问启用了会话的页面,ASP.NET将在后台创建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模式.这是使用服务器内存来存储会话状态的示例:

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

标签:session-cookies,session,c,asp-net-mvc
来源: https://codeday.me/bug/20191120/2040293.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有