在新构建之后保留Session []变量

时间:2009-08-02 20:21:54

标签: c# asp.net session-variables

我想知道是否可以在ASP.NET + C#中保留Session变量思想构建?

我问这个是因为每次我对我的应用程序进行微小的更改并需要重建它时,我需要再次登录并在此之后进行操作...这需要花费我很多时间。

如果没有办法,我可以设置一个测试模式,我将始终登录,或自动化登录程序......但这样可以节省我在构建后保留Session的时间。 / p>

3 个答案:

答案 0 :(得分:6)

您可以更改测试服务器以使用State Server or SQL Server session state modes,这将在应用程序重新启动后继续存在。

答案 1 :(得分:3)

我在开发过程中不想处理身份验证时使用过这个hack:

protected void Page_PreInit(object sender, EventArgs e)
    {
        // Fake authentication so I don't have to create a damn Login page just for this.
        System.Web.Security.FormsIdentity id = new FormsIdentity(new FormsAuthenticationTicket("dok", false, 30));
        string[] roles = { "a" };
        HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id, roles);
    }

这只会在您放置它的页面上起作用,但您可以将其添加到基页。

在宣传代码以测试/ QA / UAT / prod之前,你必须记得删除它!

答案 2 :(得分:0)

这个答案是社区维基,以免产生任何声誉,因为它实际上是DOK答案的改写。如果你喜欢它,请upvote DOK的回答。

@Dok,如果你想编辑你的答案以包含任何这些,请做,我很乐意删除这个答案。 :)

DOK,正如我对您的回答的评论中提到的(可能对您自己的解决方案有所帮助),您可能希望执行以下操作:

#if DEBUG //As mentioned by DOK in the comments. If you set debug to false when building for deployment, the code in here will not be compiled.
protected void Page_PreInit(object sender, EventArgs e)
{
  bool inDevMode = false;
  inDevMode = bool.Parse(ConfigurationManager.AppSettings["InDevMode"]); //Or you could use TryParse

  if(inDevMode)
  {
    // Fake authentication so I don't have to create a damn Login page just for this.
    System.Web.Security.FormsIdentity id = new FormsIdentity(new FormsAuthenticationTicket("dok", false, 30));
    string[] roles = { "a" };
    HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id, roles);
  }
}
#endif

为了进一步确保您不会意外地使用此活动部署,那么您可以在单独的配置文件(以及调试部分)中设置应用程序设置。如果您使用Web Deployment项目,那么您可以将您的开发配置设置放在一个文件中,将您的实时配置文件放在另一个文件中(通常是dev.config和live.config!)。

例如,在你的web.config中:

<appSettings file="dev.config"/>

在你的dev.config中:

<appSettings>
  <add key="InDevMode" value="true" />
</appSettings>

在你的live.config中:

<appSettings>
  <add key="InDevMode" value="false" />
</appSettings>