从应用程序中更改Web.Config SessionTimeout值

时间:2011-06-01 21:08:01

标签: c# asp.net web-config timeout

我正在尝试找出一种动态更改会话超时的方法,因为我的客户已经请求这是一个他们可以轻松更改的值(就好像它是一个数据库事务)。这是我想要改变的值的截断版本:

<appSettings>
   <add key="SessionTimeout" value="20"/>
</appsettings>

我正在使用C#/。Net 3.5来完成所有这些。

对于记录,我知道更改web.config文件将导致重新启动应用程序。我想要的是让程序管理员能够动态地改变超时。例如,如果他们要求人们填写的表格之一花费的时间超过20分钟,他们需要将时间缩短半小时,或者如果他们因为其他原因需要缩短时间。由于我们希望将用户(包括管理员)排除在代码文件之外,因此目标是将其创建为网站管理页面的一部分。

问题是,我不知道如何做到这一点,或者它是否可能(更不用说是个好主意)。我已经给谷歌跑来跑去,什么都没有。

有没有办法进行这些更改,甚至可能动态地动态更改超时(覆盖web.config的内容)?

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

可以在运行时编辑web.config,但正如您已经指出的那样,我不确定这是不是一个好主意。有多种方法可以实际编辑此文件,但是您必须确保运行应用程序的帐户具有相应的文件系统权限才能写入应用程序目录(例如,编辑和保存web.config文件)。如果您处于群集环境中,我强烈建议不要沿着这条路走下去(尽管仍然可能)。

一旦你的权限等被整理出来,下面是一个快速的方法。

public void EditMyWebConfig(string appSettingsKey, string appSettingsValue, string         filePath)
    {
        XmlDocument xml = new XmlDocument();
        //Load current config into memory
        xml.Load(filePath);
        //Overwrite config
        using(FileStream fs = new FileStream(filePath, FileMode.Create,FileAccess.ReadWrite))
        {
            //select appSetting you want to edit
            XmlNode xmlN = xml.SelectSingleNode("//configuration/appSettings/add[@key = '" + appSettingsKey + "']");
            //assign new value
            xmlN.Attributes["value"].Value = appSettingsValue;
            //Create new web config
            xml.Save(fs);
        }
    }

我希望这会有所帮助,但我认为你应该选择一个大会话时间会更容易,并且将来会导致更少的问题。

答案 1 :(得分:1)

如何在运行时更改代码中的Session.Timeout,而不是尝试更改web.config?

更多信息:

http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.timeout.aspx

答案 2 :(得分:1)

从您需要的代码扩展超时:

Session.Timeout = 40;

此外,如果您尝试在config中更改此参数,则会导致应用程序池重新启动。