会话在MVC 4中超时

时间:2014-05-20 09:35:05

标签: asp.net-mvc-4 session-timeout

我搜索了许多网站,包括 Stackoverflow ,关于在MVC中使用会话超时,但是所有网站和代码只显示了WebConfig中使用的部分代码,但它并没有显示需要填充webconfig的位置

我开发了一个应用程序,现在我想在5分钟后添加会话超时,如果应用程序处于空闲状态,许多人已声明使用客户端和服务器端,我有点困惑在哪里使用它。 我从stackoverflow中找到了可以在WebConfig中使用的代码

 <system.web>
  <sessionState timeout="30"></sessionState>
</system.web>

我的问题是哪个webconfig以及在哪里添加? 因为在MVC中我有两个webconfig文件一个在View中,另一个在主项目中,我尝试在webconfig中应用,就在&#34;配置&#34;旁边像这样

 <configuration> 
     <system.web>
  <sessionState timeout="30"></sessionState>
</system.web>
  </configuration>

它会生成错误消息,所以请告诉我如何使用Session timed out for this application

已更新

感谢您的所有回复,我已经应用了下面的所有代码,并附上了错误消息的屏幕截图,请检查并让我知道我做错了什么 1)如果我使用以下代码,即

  <system.web>
  <sessionState mode="InProc" cookieless="false" timeout="30"></sessionState>
</system.web>
在主网络配置下的

然后获取如下图所示的错误消息 on main webconfig

2)如果我在视图下的webconfig上使用相同的代码,我会得到此错误图片 on view webconfig

以及我附加两个webconfig文件的图像文件

- &GT; in View WebConfig

- &GT; in main Webconfig

希望我分享了更多信息,问我是否错过了什么

UPDATE2

主网页

<configuration>

<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
<sectionGroup name="businessObjects">
  <sectionGroup name="crystalReports">
    <section name="rptBuildProvider" type="CrystalDecisions.Shared.RptBuildProviderHandler, CrystalDecisions.Shared, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304, Custom=null" />
    <section name="crystalReportViewer" type="System.Configuration.NameValueSectionHandler" />
  </sectionGroup>
</sectionGroup>

<businessObjects>
  <crystalReports>
    <rptBuildProvider>
      <add embedRptInResource="true" />
    </rptBuildProvider>
    <crystalReportViewer>
      <add key="ResourceUri" value="../crystalreportviewers13" />
    </crystalReportViewer>
  </crystalReports>
</businessObjects>

<add name="webPortalConnectionString" connectionString="Data Source=mysys-021\SQLEXPRESS;Initial Catalog=LIS_MHL_LIVE;User ID=sa;Password=cspl#" providerName="System.Data.SqlClient"/>
<add name="LISConnectionString" connectionString="User ID=sa;Password=cspl#; Data Source=mysys-021\SQLEXPRESS;INITIAL CATALOG=LIS_MHL_LIVE;Persist Security Info=True" providerName="System.Data.SqlClient" />

                                                                
    

<compilation debug="true" targetFramework="4.5">
  <assemblies>
    <add assembly="CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
    <add assembly="CrystalDecisions.Shared, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
    <add assembly="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
    <add assembly="CrystalDecisions.ReportSource, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
    <add assembly="CrystalDecisions.ReportAppServer.Controllers, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
    <add assembly="CrystalDecisions.ReportAppServer.DataDefModel, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
    <add assembly="CrystalDecisions.CrystalReports.Engine, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
  <add assembly="CrystalDecisions.ReportAppServer.ClientDoc, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/></assemblies>
</compilation>
<httpRuntime targetFramework="4.5"/>
<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880"/>
</authentication>
<pages>
  <namespaces>
    <add namespace="System.Web.Helpers"/>
    <add namespace="System.Web.Mvc"/>
    <add namespace="Kendo.Mvc.UI"/>
    <add namespace="System.Web.Mvc.Ajax"/>
    <add namespace="System.Web.Mvc.Html"/>
    <add namespace="System.Web.Optimization"/>
    <add namespace="System.Web.Routing"/>
    <add namespace="System.Web.WebPages"/>
  </namespaces>
</pages>

                                                                                                                                                                                         

4 个答案:

答案 0 :(得分:1)

您只需在主web.config中添加: -

<configuration>  
  ...  
  <system.web>  
    <sessionState mode="InProc" timeout="30" />  
  </system.web>  
  ...  
</configuration>  

会话状态设置默认情况下,ASP.NET使用cookie来标识哪些请求属于特定会话。如果cookie不可用,则可以通过向URL添加会话标识符来跟踪会话。要禁用cookie,请设置sessionState cookieless =&#34; true&#34;。

需要更多相关知识,请点击以下链接: -
http://msdn.microsoft.com/en-us/library/h6bb9cz9%28vs.80%29.aspx

希望这会对你有所帮助。

<强> EDITED: -
您可以在子目录中放置多个web.config文件,ASP.NET将覆盖您在该目录中更改的任何设置。 大多数情况下,Views目录中的web.config只有一个重要条目,它阻止了直接访问:

<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>  

这是有人无法手动尝试转到http://www.yoursite.com/views/main/index.aspx并将页面加载到MVC管道之外。

&gt;&gt; 在查看您的配置和错误消息之后,我得出结论: 您在配置中使用了configSections标记(在两个地方。),这就是您收到此错误的原因。

<强> EDITED-2 : -
我看到你的评论,并认为你应该看看这个页面:) Format of ASP.NET Configuration Files -
http://msdn.microsoft.com/en-us/library/ackhksh7%28v=vs.71%29.aspx

如何将2个webconfig放在子目录中: -
你应该看看Configuration Inheritance: -
http://msdn.microsoft.com/en-us/library/dtbwsx8s%28v=vs.71%29.aspx

答案 1 :(得分:0)

在你的Web.config中

试试这个:

<system.web>
<sessionState mode="InProc" timeout="5" />
</system.web>

答案 2 :(得分:0)

从MSDN开始说,默认元素未在Machine.config文件或根Web.config文件中显式配置。但是,它是应用程序返回的默认配置。

<sessionState 
   mode="InProc" 
   stateConnectionString="tcpip=127.0.0.1:42424" 
   stateNetworkTimeout="10" 
   sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI" 
   sqlCommandTimeout="30" 
   customProvider="" 
   cookieless="UseCookies" 
   cookieName="ASP.NET_SessionId" 
   timeout="20" 
   allowCustomSqlDatabase="false" 
   regenerateExpiredSessionId="true" 
   partitionResolverType="" 
   useHostingIdentity="true">
   <providers>
      <clear />
   </providers>
</sessionState>

请阅读完整的MSDN参考from here

答案 3 :(得分:0)

您应该将该部分添加到 main web.config 文件中。 View的web.config文件仅适用于视图。

<system.web>
 <sessionState mode="InProc" cookieless="false" timeout="80" />
</system.web>

确保web.config文件中只有一个system.web标记。如果它已经存在而不是只写<sessionState mode="InProc" cookieless="false" timeout="80" />