当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > asp.net 修改/删除站内目录操作后Session丢失问题

ASP.NET
关于如何操作其他窗体的控件或变量的方法
一个简单的.net remoting客户端例子
System.Runtime.Remoting.Activation.ActivationServices.CreateInstance()
单点登录—演示:passport.winspace.net
WebSerivce研究笔记
[新]可精确到1毫秒的用以在记录文件中写入自定义的调试信息(主要是时间)的组件
vs.net 2005中文版下载地址收藏
VS2005Beta2安装几点经验和体会
一个Web文件上传的C#源代码
C#重点知识详解(一)
利用C#线程机制实现应用程序的单实例运行
C#重点知识详解(二)
c#重点知识详解(三)
c#重点知识详解(四)
c#重点知识解答(五)
c#重点知识详解(六)
通过命令行方式使用NUnit进行UT
程序控制开始菜单的弹出 C#
XSL、XML教程-DVBBS皮肤制作 最基本的语法
MapX从数据库读取数据形成新图层(C#)

ASP.NET 中的 asp.net 修改/删除站内目录操作后Session丢失问题


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-10   浏览: 256 ::
收藏到网摘: n/a

在Web项目中使用 Directory.Move(olddir,newdir)修改目录名称或使用Directory.Delete(true)删除目录后, 发现Session都失效。 后来经过试验发现,如果删除改变的目录不属于当前项目所在虚拟目录,则Session可用,相反则不可用;调试跟踪中提示的:Session.get_item()……返回null;
后经过研究发现,在虚拟目录删除改变目录会造成Session丢失,以至于失效。而session丢失的实质就是:应用程序重起!
这里有多种解决方案:
1)利用外部进程保存 session
2)利用数据库保存 session
3)用户ID放入cookie,若检测到session为空但cookie存在在重新初始化 session.
4)将要对其进行操作的目录移出asp.net程序外
我这里使用了第一种,操作如下:
1. 首先启动"ASP.NET 状态服务",如果这个服务不启动,后面的更改不会起作用。
2. 在Web.config中修改<sessionState/>配置如以下代码所示
复制代码 代码如下:

<sessionState
mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:1314"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="40"
/>

完成上面两点,就算是IIS重启动了,只要客户端的浏览器标示没变化,session就还有效.
3.如果以上设置还是无效的话,需要修改一下注册表:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters]
"AllowRemoteConnection"=dword:00000001000
注意:如果要在Session中存储对象,则要在类上添加[Serializable]属性,即使该对象可序列化。