开发环境: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();
}
}