開發環境: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>
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();
}
}