http://www.yesky.com/imagesnew/software/asp/innerobject/session/intr12d0.htm
http://hi.baidu.com/djiz/blog/item/addcd61be69806f2af5133ae.html
http://bbs.dg.gd.cn/bview.asp?BAID=1321A3A50502E4WU2BA30SCT
SessionState 的Timeout),其主要原因有三种。
一:有些杀病毒软件会去扫描您的Web.Config文件,那时Session肯定掉,这是微软的说法。
二:程序内部里有让Session掉失的代码,及服务器内存不足产生的。
三:程序有框架页面和跨域情况。
第一种解决办法是:使杀病毒软件屏蔽扫描Web.Config文件(程序运行时自己也不要去编辑它)
第二种是检查代码有无Session.Abandon()之类的。
第三种是在Window服务中将ASP.NET State Service 启动。
http://community.csdn.net/Expert/topic/3100/3100218.xml?temp=.4426386
还有可能就是你在测试期间改动了,网站的文件。
下面是帮助中的内容:
(ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconsessionstate.htm)
ASP.NET 提供一个简单、易于使用的会话状态模型,您可以使用该模型跨多个 Web 请求存储任意数据和对象。它使用基于字典的、内存中的对象引用(这些对象引用存在于 IIS 进程中)缓存来完成该操作。使用进程内会话状态模式时请考虑下面的限制:
使用进程内会话状态模式时,如果 aspnet_wp.exe 或应用程序域重新启动,则会话状态数据将丢失。这些重新启动通常会在下面的情况中发生:
在应用程序的 Web.config 文件的 <processModel> 元素中,设置一个导致新进程在条件被满足时启动的属性,例如 memoryLimit。
修改 Global.asax 或 Web.config 文件。
更改到 Web 应用程序的 /Bin 目录。
用杀毒软件扫描并修改 Global.asax 文件、Web.config 文件或 Web 应用程序的 /Bin 目录下的文件。
如果在应用程序的 Web.config 文件的 <processModel> 元素中启用了网络园模式,请不要使用进程内会话状态模式。否则将发生随机数据丢失。
我也碰到过。本机器上的Session或者Cookie丢失。
<sessionState
mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="40"
/>
mode=""的三个属性。本地/其他机器/sqlserver。
很多网络架构,各个服务器之间都是通过一台专门保存状态的服务器来保存比如说session,cookie..
我遇到的也是在框架(frame)内登陆有时session会丢失,无奈只好放弃框架
启动ASP.NET State Service服务
然后设置Webconfig文件。
<sessionState
mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:999999"(自定义)
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"(自定义)
cookieless="false"
timeout="20"
/>
我以前遇到这种问题,我用了以下几个方法来解决。现在也没有这种情况发生了。
1、release,不要debug发布。
2、<sessionState cookieless="true" 把cookieless设为true。因为客户端禁用cookie时,session也无效。
3、在IIS中把Session过期时间延长。
4、让杀毒软件不扫描bin文件夹下的文件和Web.Config文件 。
以上我是不明不白的做的。不过Session正常使用了!呵呵~~我幸运!
没啥好讲的,不要用Session好了,直接用Forms认证把,
我前两天的系统就是用这个搞定的,觉得挺好的。
刚碰到一个类似的问题:在使用frameset的时候,session变量丢失。
在微软的网站上找到了解决的方法
http://support.microsoft.com/kb/323752/EN-US/
不知道是否有用?
IIS--->>应用程序连接池--->>属性---->>[回收][性能][运行状况]里的各项参数尽量都往大的改^_^),我不知道改拉那个才对的,反正我改完后所有的session都好拉.客户的网站和动网论坛的后台也跟着好拉
将Session保存在State Server里:
1.启动服务“ASP.NET State Service”,
2.然后,修改web.config:
<sessionState
mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="140000"
/>
注意://mode="StateServer"这种模式下即使修改页面也不会丢失session!
当然:
mode="InProc"如果你的模式为这种,修改页面的时候会丢失session!!!!!!
在WebConfig里将Session的Mode设成SQLServer或者StateServer都不会丢Session的,前者需要写入数据库,后者需要系统开StateServer服务。
可以使用 Session 对象存储特定用户会话所需的信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。
Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。有关使用 Session 对象的详细信息,请参阅“ASP 应用程序”部分的“管理会话”。
注意 会话状态仅在支持 cookie 的浏览器中保留。
Session.collection|property|method
Contents | 包含已用脚本命令添加到会话中的项目。 |
StaticObjects | 包含通过 <OBJECT> 标记创建的并给定了会话作用域的对象。 |
CodePage | 将用于符号映射的代码页。 |
LCID | 现场标识。 |
SessionID | 返回用户的会话验证。 |
Timeout | 应用程序会话状态的超时时限,以分钟为单位。 |
Abandon | 该方法破坏 Session 对象并释放其资源。 |
global.asa 文件中声明下列事件的脚本。
Session_OnEnd |
Session_OnStart |
有关以上事件及 global.asa 文件的详细信息, 请参阅 Global.asa 参考.
您可以在 Session 对象中存储值。存储在 Session 对象中的信息在会话及会话作用域内有效。下列脚本演示两种类型的变量的存储方式。
<% Session("username") = "Janine" Session("age") = 24 %>
但是,如果您将对象存储在 Session对象中,而且您使用 VBScript 作为主脚本语言。则必须使用关键字 Set。如下列脚本所示。
<% Set Session("Obj1") = Server.CreateObject("MyComponent.class1") %>
然后,您就可以在后面的 Web 页上调用 MyComponent.class1
揭示的方法和属性,其调用方法如下:
<% Session("Obj1").MyMethod %>
也可以通过展开该对象的本地副本并使用下列脚本来调用:
<% Set MyLocalObj1 = Session("Obj1") MyLocalObj1.MyObjMethod %>
创建有会话作用域的对象的另一种方法是在 global.asa 文件中使用 <OBJECT> 标记。
但是不能在 Session 对象中存储内建对象。例如,下面每一行都将返回错误。
<% Set Session("var1") = Session Set Session("var2") = Request Set Session("var3") = Response Set Session("var4") = Server Set Session("var5") = Application %>
在将对象存储到 Session 对象之前,必须了解它使用的是哪一种线程模型。只有那些标记为“Both”的对象才能存储在没有锁定单线程会话的 Session 对象中。详细信息, 请参阅“创建 ASP 组件”中的“选择线程模型”。
若您将一个数组存储在 Session对象中,请不要直接更改存储在数组中的元素。例如,下列的脚本无法运行。
<% Session("StoredArray")(3) = "new value" %>
这是因为 Session对象是作为集合被实现的。数组元素 StoredArray(3)
未获得新的赋值。而此值将包含在 Application 对象集合中,并将覆盖此位置以前存储的任何信息。
我们极力建议您在将数组存储在 Session对象中时,在检索或改变数组中的对象前获取数组的一个副本。在对数组操作时,您应再将数组全部存储在 Session 对象中,这样您所做的任何改动将被存储下来。下列的脚本对此进行演示。
---file1.asp--- <% 'Creating and initializing the array Dim MyArray() Redim MyArray(5) MyArray(0) = "hello" MyArray(1) = "some other string" 'Storing the array in the Session object Session("StoredArray") = MyArray Response.Redirect("file2.asp") %> ---file2.asp--- <% 'Retrieving the array from the Session Object 'and modifying its second element LocalArray = Session("StoredArray") LocalArray(1) = " there" 'printing out the string "hello there" Response.Write(LocalArray(0)&LocalArray(1)) 'Re-storing the array in the Session object 'This overwrites the values in StoredArray with the new values Session("StoredArray") = LocalArray %>
下列代码将字符串 MyName
分配给名为 name
的会话变量,并给名为 year
的会话变量指定一个值,而且为 some.Obj
组件的实例指定一个名为 myObj
的变量。
Session("name") = "MyName" Session("year") = 96 Set Session("myObj") = Server.CreateObject("someObj") %>