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

时间:2010-07-11 15:56:06

标签: c# asp.net .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.");
    }
}

即使将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.
提前谢谢, 乔治

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:2)

这种行为有时是由过度热心的反病毒程序引起的。尝试禁用防病毒软件,看看是否有帮助。如果有帮助,请将网站的目录添加到排除列表中。

同时关闭浏览器不会对您的会话产生任何影响。