开发环境:XP sp2 VS2008 IE 6.0
问题:开发过程中发现Session的值丢了,Session没丢,因为SessionID是一致的,很是郁闷,
知道对Bin或web.config文件进行修改会重新编译网站,就是没发现对其它目录操作会引发如此怪异的问题。记录一下
最后发现对WEB站点的目录(包括子目录)进行目录操作(重命名、删除)的时候会引发Session的值丢失,直接创建文件夹或操作文件则不会。
简单测试代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SessionTEST.aspx.cs" Inherits="SessionTEST" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<p>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="刷新" /></p>
<p>
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="站点下创建一个文件夹" /></p>
<p>
<asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="站点下删除一个文件夹" /></p>
<p>
<asp:Button ID="Button4" runat="server" Text="重新加载" onclick="Button4_Click" />
</p>
</div>
</form>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<p>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="刷新" /></p>
<p>
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="站点下创建一个文件夹" /></p>
<p>
<asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="站点下删除一个文件夹" /></p>
<p>
<asp:Button ID="Button4" runat="server" Text="重新加载" onclick="Button4_Click" />
</p>
</div>
</form>
</body>
</html>
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;
public partial class SessionTEST : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SetSessionInfo();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
WriteSessionInfo();
}
protected void Button2_Click(object sender, EventArgs e)
{
string newDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, DateTime.Now.ToFileTimeUtc().ToString());
Directory.CreateDirectory(newDir);
WriteSessionInfo();
}
protected void Button3_Click(object sender, EventArgs e)
{
foreach (var v in Directory.GetDirectories(AppDomain.CurrentDomain.BaseDirectory))
{
DirectoryInfo dirInfo = new DirectoryInfo(v);
var delDirName = dirInfo.Name;
long vv;
if (delDirName.Length == 18 && long.TryParse(delDirName, out vv))
{
dirInfo.Delete();
break;
}
}
WriteSessionInfo();
}
void WriteSessionInfo()
{
if (Session["TEST"] != null)
Response.Write(String.Format("【SessionID;{0}】Session[\"TEST\"]={1}", Session.SessionID, Session["TEST"].ToString()));
else
Response.Write(String.Format("【SessionID;{0}】Session[\"TEST\"]={1}", Session.SessionID, "null"));
}
void SetSessionInfo()
{
if (Session["TEST"] == null)
{
Session["TEST"] = "TEST";
}
WriteSessionInfo();
}
protected void Button4_Click(object sender, EventArgs e)
{
SetSessionInfo();
}
}
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;
public partial class SessionTEST : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SetSessionInfo();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
WriteSessionInfo();
}
protected void Button2_Click(object sender, EventArgs e)
{
string newDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, DateTime.Now.ToFileTimeUtc().ToString());
Directory.CreateDirectory(newDir);
WriteSessionInfo();
}
protected void Button3_Click(object sender, EventArgs e)
{
foreach (var v in Directory.GetDirectories(AppDomain.CurrentDomain.BaseDirectory))
{
DirectoryInfo dirInfo = new DirectoryInfo(v);
var delDirName = dirInfo.Name;
long vv;
if (delDirName.Length == 18 && long.TryParse(delDirName, out vv))
{
dirInfo.Delete();
break;
}
}
WriteSessionInfo();
}
void WriteSessionInfo()
{
if (Session["TEST"] != null)
Response.Write(String.Format("【SessionID;{0}】Session[\"TEST\"]={1}", Session.SessionID, Session["TEST"].ToString()));
else
Response.Write(String.Format("【SessionID;{0}】Session[\"TEST\"]={1}", Session.SessionID, "null"));
}
void SetSessionInfo()
{
if (Session["TEST"] == null)
{
Session["TEST"] = "TEST";
}
WriteSessionInfo();
}
protected void Button4_Click(object sender, EventArgs e)
{
SetSessionInfo();
}
}