ASP.Net会话开始和结束问题

Geo*_*ge2 4 .net c# asp.net iis visual-studio-2008

我使用ASP.Net + .Net 3.5 + VSTS 2008 + IIS 7.0 + C#来开发Web应用程序.我正在创建一个非常简单的Web应用程序,我刚刚修改了page_load,Session_Start和Session_End.这是我的代码,我的问题是我发现会话结束消息在会话启动消息后立即写入文件.我的测试方法只是打开IE来访问这个页面.我认为会议应该持续很长时间,比如几分钟.为什么会话结束如此之快?即使我不关闭页面,为什么seeion会结束?

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write("Hello World! ");
    Session["SomeUserData"] = DateTime.Now;
}

protected void Session_Start(object sender, EventArgs e)
{
    using (TextWriter tw = new StreamWriter(@"C:\TestSession\bin\session.txt", true))
    {
        // write a line of text to the file
        tw.WriteLine(DateTime.Now + " Session Started.");
    }
}

protected void Session_End(object sender, EventArgs e)
{
    using (TextWriter tw = new StreamWriter(@"C:\TestSession\bin\session.txt", true))
    {
        // write a line of text to the file
        tw.WriteLine(DateTime.Now + " Session Ended.");
    }
}
Run Code Online (Sandbox Code Playgroud)

即使将Session操作代码添加到Page_Load方法中,我遇到了同样的问题,这里是输出文件内容,您可以看到会话结束事件在会话开始后立即被调用.

2010/7/15 0:11:14 Session Started.
2010/7/15 0:11:14 Session Ended.
2010/7/15 0:11:28 Session Started.
2010/7/15 0:11:28 Session Ended.
Run Code Online (Sandbox Code Playgroud)

乔治,提前谢谢

air*_*x86 8

如果我没记错的话,你需要为Session分配一些内容来激活它.否则ASP.NET每次都会重新生成一个新会话(如果你使用fiddler来检查新的会话ID).

编辑:因为session.txt位于bin目录中.写入bin目录后,应用程序将重新启动,以便立即触发Session_End事件.将session.txt从bin目录移到其他地方将解决您的问题.

  • @ George2,我找出原因,这是因为session.txt位于bin目录中.写入bin目录后,应用程序将重新启动,以便立即触发Session_End事件.将session.txt从bin目录移到其他地方将解决您的问题. (2认同)