为了测试我有一个隔离的页面 - 没有主人,控件,....我的会话在大约30秒后丢失。我已经尝试在web.config中设置超时,在web.config中,两者都没有。尝试使用超时和Windows身份验证进行表单身份验证更改后回收AppPool。
我可以从Session_Start响应。但是我从来没有得到任何来自Session_End的响应。
我尝试过的一些事情:
<sessionState mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;"
cookieless="false"
timeout="20" />
<sessionState mode="InProc" cookieless="false" timeout="20"/>
<sessionState mode="InProc" timeout="20"/>
<sessionState timeout="20"/>
没有运气。
我的运行时设置为:
<httpRuntime useFullyQualifiedRedirectUrl="true"
maxRequestLength="204800"
requestLengthDiskThreshold="204800"
executionTimeout="600" />
我不知道这会有什么相关性,但我想不出任何其他事情要发布!
谢谢!
答案 0 :(得分:1)
如果你正在进行inproc会话(代码片段说明你是这样)并且某些东西一直在触摸虚拟文件夹或其下面的任何内容,那么它就会准备好丢失很多会话。
如果是这种情况,这就是修复:
'This is supposed to turn off the monitoring for directory deletes
'See https://connect.microsoft.com/VisualStudio/feedback/Workaround.aspx?FeedbackID=240686
'This incurrs the penelty of an IISRESET or manually restarting the containing AppPool after every upgrade.
Dim pi As PropertyInfo
Dim o As Object
Dim m As MethodInfo
pi = GetType(System.Web.HttpRuntime).GetProperty("FileChangesMonitor", BindingFlags.NonPublic Or BindingFlags.Public Or BindingFlags.Static)
o = pi.GetValue(Nothing, Nothing)
m = o.GetType().GetMethod("Stop", BindingFlags.Instance Or BindingFlags.NonPublic)
m.Invoke(o, New Object() {})
答案 1 :(得分:0)
你怎么知道你的会话丢失了?您是否在浏览器中启用了Cookie?
修改强>
这是一个更简单,更简单的测试页面:
<body>
<form id="form1" runat="server">
<div>
Session value is: <%= Session["testvalue"] %><br />
<asp:TextBox ID="txtText" runat="server"></asp:TextBox>
<asp:Button ID="btnSet" runat="server" Text="Set" OnClick="btnSet_Click" /><br />
<asp:Button ID="btnRefresh" runat="server" Text="Refresh" />
</div>
</form>
</body>
背后的代码:
public partial class SessionTest : System.Web.UI.Page
{
protected void btnSet_Click(object sender, EventArgs e)
{
Session["testvalue"] = txtText.Text;
}
}
另一种可能性是由于App域重新启动而导致会话丢失。将某种日志记录输出添加到Application_Start。