`

session 状态 失效

 
阅读更多
 asp.net Session的实现:   asp.net的Session是基于HttpModule技术做的,HttpModule可以在请求被处理之前,对请求进行状态控制,由于Session本身就是用来做状态维护的,因此用HttpModule做Session是再合适不过了。   ASP.NET中Session的状态保持方式   ASP.NET提供了Session对象,从而允许程序员识别、存储和处理同一个浏览器对象对服务器上某个特定网络应用程序的若干次请求的上下文信息。Session对应浏览器与服务器的同一次对话,在浏览器第一请求网络应用程序的某个页面时,服务器会触发Session_onStart事件;在对话超时或者被关闭的时候会触发Session_onEnd 事件。程序员可以在代码中响应这两个事件来处理与同一次对话相关的任务,如开辟和释放该次对话要使用的资源等。   在ASP.NET的程序中要使用Session对象时,必须确保页面的@page指令中EnableSessionState属性是True或者Readonly,并且在web.config文件中正确的设置了SessionState属性。   ASP.NET中Session的状态保持是由web.config文件中的<system.web>标记下的<sessionstate>标记的mode属性来决定的。该属性有四种可能的值:Off、Inproc、StateServer和SQlServer.设为Off会禁用Session.   Inproc是缺省的设置,这种模式和以前的ASP的会话状态的方法是类似的,会话的状态会被保存在ASP.NET进程中,它的优点是显而易见的:性能。进程内的数据访问自然会比夸进程的访问快。然而,这种方法Session的状态依赖于ASP.NET进程,当IIS进程崩溃或者正常重起启时,保存在进程中的状态将丢失。   为了克服Inproc模式的缺点,ASP.NET提供了两种进程外保持会话状态的方法。ASP.NET首先提供了提供了一个Windows服务:ASPState,这个服务启动后,ASP.NET应用程序可以将mode属性设置为“SateServer”,来使用这个Windows服务提供的状态管理方法。   除了在web.config文件中设置mode属性为StateServer外,还必须设置运行StateServer服务器的IP地址和端口号.如果在IIS所在的机器运行StateServer则IP地址就是127.0.0.1,端口号通常是42424.配置如下:   mode=”StateServer”   stateConnectionString="tcpip=127.0.0.1:42424"   使用这种模式,会话状态的存储将不依赖IIS进程的失败或者重启,会话的状态将存储在StateServer进程的内存空间中。   另一种会话状态模式是SQLServer模式。这种模式是将会话的状态保存在SQL Server数据库中的。使用这种模式前,必须至少有一台SQL Server服务器,并在服务器中建立需要的表和存储过程。.NET SDK提供了两个脚本来简化这个工作:InstallSqlState.sql和UnInstallSqlState.sql。这两国文件存放在下面路径中:   \Winnt\Microsoft.NET\Framework\\   要配置SQL Server 服务器,可以在命令行中运行SQL Server提供的命令行工具osql.exe   osql -s [server name] -u [user] -p [password] <installsqlstate.sql as installsqlstate.sql source='127.0.0.1;userid=sa;password=;Trusted_Connection=yes"' server mode="InProc" stateconnectionstring="tcpip=127.0.0.1:42424" sqlconnectionstring="data source=127.0.0.1;Trusted_Connection=yes" cookieless="true" timeout="60"></installsqlstate.sql>   我们会发现sessionState标签中有个属性mode,它可以有3种取值:InProc、StateServer?SQLServer(大小写敏感)。默认情况下是InProc,也就是将Session保存在进程内(IIS5是aspnet_wp.exe,而IIS6是W3wp.exe),这个进程不稳定,在某些事件发生时,进程会重起,所以造成了存储在该进程内的Session丢失。[asp的Session是具有进程依赖性的。ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序。所以当inetinfo.exe进程崩溃时,这些信息也就丢失。]   哪些情况下该进程会重起呢?微软的一篇文章告诉了我们:   1、配置文件中processModel标签的memoryLimit属性   2、Global.asax或者Web.config文件被更改   3、Bin文件夹中的Web程序(DLL)被修改   4、杀毒软件扫描了一些.config文件。   更多的信息请参考PRB: Session variables are lost intermittently in ASP.NET applications(链接:http://support.microsoft.com/kb/316148/EN-US/)   解决办法:   前面说到的sessionState标签中mode属性可以有三个取值,除了InProc之外,还可以为StateServer、SQLServer。这两种存Session的方法都是进程外的,所以当aspnet_wp.exe重起的时候,不会影响到Session。 现在请将mode设定为StateServer。StateServer是本机的一个服务,可以在系统服务里看到服务名为ASP.NET State Service的服务,默认情况是不启动的。当我们设定mode为StateServer之后,请手工将该服务启动。这样,我们就能利用本机的StateService来存储Session了,除非电脑重启或者StateService崩掉,否则Session是不会丢的(因Session超时被丢弃是正常的)。 除此之外,我们还可以将Session通过其他电脑的StateService来保存[如使用状态服务器]。具体的修改是这样的。同样还在sessionState标签中,有个stateConnectionString='tcpip=127.0.0.1:42424'属性,其中有个ip地址,默认为本机(127.0.0.1),你可以将其改成你所知的运行了StateService服务的电脑IP,这样就可以实现位于不同电脑上的Asp.net程序互通Session了。 如果你有更高的要求,需要在服务期重启时Session也不丢失,可以考虑将mode设定成SQLServer,同样需要修改sqlConnectionString属性。关于使用SQLServer保存Session的操作,请访问这里。 在使用StateServer或者SQLServer存储Session时,所有需要保存到Session的对象除了基本数据类型(默认的数据类型,如int、string等)外,都必须序列化。只需将[Serializable]标签放到要序列化的类前就可以了。   如:   [Serializable]   public class MyClass   {     ......   }   具体的序列化相关的知识请参这里(http://www.microsoft.com/china/msdn/archives/library/dndotnet/html/objserializ.asp#objserializ_topic4)。   至此,问题解决。 </sessionstate></system.web>
  • net.rar (111.6 KB)
  • 下载次数: 0
分享到:
评论

相关推荐

    Session对象失效的客户端解决方法

    当前用户的Session对象中定义的变量和对象能在页面之间共享,但是不能为应用中其他用户所访问,因此在用ASP开发网络应用程序时,可以利用Session对象保存和跟踪用户的状态信息。  Session对象有一个十分重要的属性...

    Session 失效的原因汇总及解决丢失办法

    昨天去GTSC面试,有面试官问我关于Session丢失之后怎么查...ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序。所以当inetinfo.exe进程崩溃时,这些信息也就丢失。另外,重起或者关闭IIS服务都会造成信息的

    Asp.Net程序目录下文件夹或文件操作导致Session失效的解决方案

    &lt;sessionState mode=StateServer stateConnectionString=tcpip sqlConnectionString=data source=127.0.0.1;Trusted_Connection cookieless=false timeout=40/&gt; 2、在Global.asax中添加启动启动ASP.NET 状态服务...

    Django Session和Cookie分别实现记住用户登录状态操作

    主要介绍了Django Session和Cookie分别实现记住用户登录状态操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    SpringBoot 实现扫码登录

    PC端监听二维码session状态接口,目前定义状态:0 二维码生成成功 ,1 手机端扫码成功 2手机端确认登录 -1 sessionId过期失效 二维码扫描通知,手机端扫描成功会调用此接口,发送session通知 手机端确认通知,手机端...

    C# SESSION丢失问题的解决办法

    1、在WEB.CONFIG文件中修改SESSION状态保存模式,如:&lt;sessionState mode=’StateServer’ stateConnectionString=’tcpip sqlConnectionString=’data source=127.0.0.1;Trusted_Connection cookieless=’true’ ...

    PHP7创建销毁session的实例方法

    在本篇文章里小编给大家整理的是关于PHP7创建销毁session的实例方法,有需要的朋友们可以参考下。

    HTML5 Web缓存和运用程序缓存(cookie,session)

    在介绍HTML5 web缓存前,来认识一下cookie和session: session: ...而session id是存储在cookie中的,也就是说如果浏览器禁用了cookie,那么session会失效!(但是可以通过其它方式实现,如:通过URL传递

    详解SpringSession架构与设计

    开始进行Web开发时,您可能在使用...容器(例如Tomcat、Jetty)包含Session的实现,当服务器重启之后,之前的登录状态会失效需要重新登录。 我们先从HTTP协议说起。HTTP协议有个特点,是无状态的,意味着请求与请求是没

    会话管理器「session manager」-crx插件

    2. 我们点击右上角的 "清除当前页面所有cookie" 按钮, 清空 cookie, 注意: 不要点击退出, 否则之前保存的 session(php、java这些的session) 会失效 3. 这时候再刷新, 会提示登陆, 再次登陆(使用不同账号), 并且输入...

    kisso单点登录

    1、session 存放在服务器端,cookie 存放在客户端,存在两种状态:“ 第一种:持久 cookie 具有时效性,以文件的形式存放在客户机硬盘中,时间一到生命周期结束自动被删除。第二种:临时 cookie 又叫会话 cookie 放在...

    NET葵花宝典-new.doc

    缺点:可能会丢失(Session过期或失效等情况)。 Cookie:通过客户端Cookie传值。 优点:读取该Cookie的所有页面都可以使用。 缺点:只能够存储文本信息(字符串),且大小不能超过4KB。 Application:通过全局...

    ie与session丢失(新窗口cookie丢失)实测及解决方案

    正如标题所言测试结果为:如果cookie设置是延后定时失效,而非进程级的,那在open后也能看到,所以,针对此情况,防止用户在使用ie内核出现登录状态丢失,可以配合cookie来使用

    ASP.NET.4揭秘 卷2

    n321 在Session状态中保存数据库数据 n322 使用Session对象 n323 处理Session事件 n324 会话失效控制 n325 使用无Cookie的Session状态 n326 配置Session状态存储 n327 配置SQL Server Session状态 n33 使用用户配置...

    解决Laravel5.2 Auth认证退出失效的问题

    登录正常,但是退出的时候并没有清掉session,退出后还是处于登录状态。解决方法如下: 路由如下 Route::group(['namespace' =&gt; 'Admin', 'middleware' =&gt; 'auth'], function() { Route::resource('admin/post', '...

    解决vue router组件状态刷新消失的问题

    传统的方案是,登录页和主页是单独的两个页面,登录成功后服务器生成用户信息对应的session,然后渲染主页数据,并通过响应头将sessionid传给浏览器并生成相应的cookie文件。这样下次请求页面时,浏

    基于JAVA的集群双机环境下的缓存框架

    MapCache是纯JAVA写的,用的HashMap来...支持某台服务器关闭后启动着的服务器自动将切换成单机状态,支持关闭的服务器重启后马上能同步更新已存在的数据并将缓存切换成同步状态,支持为缓存设置失效时间(类似session)。

    MapCache,集群缓存框架

    MapCache是纯JAVA写的,用的HashMap来...支持某台服务器关闭后启动着的服务器自动将切换成单机状态,支持关闭的服务器重启后马上能同步更新已存在的数据并将缓存切换成同步状态,支持为缓存设置失效时间(类似session)。

    纯JSP演示Cookie自动登录(完整工程)

    纯JSP演示Cookie自动登录(完整工程...哪怕服务器重启后session丢失,靠客户端COOKIE仍然正常登录并刷新COOKIE。点退出登录后COOKIE失效。 现为WEB,可改造为提供android 和ios下的httpclient保持长久登录状态的方式。

Global site tag (gtag.js) - Google Analytics