asp.net修改网站目录结构后session失效的最佳解决方法

技术教程2019/11/2 9:43:18阅读:788
今天用asp.net写网站,有一个需求需要在服务器上动态生成目录、删除目录,在这里遇到一个很特别神奇的事情,写好了处理目录的逻辑之后再运行的时候发现所有和session有关的操作全部都失效了,用户登录之后进入首页,因为页面加载的时候要判断储存用户信息的session是否存在,刚登录进去就立刻跳转到login登录界面了,发现这个现象的时候各种调试都找不出原因,后来在网上一搜索发现原来是因为操作了网页的目录。


然后我想session不能用了cookie总好使吧,谁知道cookie也不行~~~


cookie不行了再试试静态类能不能用,调试了一下也不能用,储存的值改变它的时候是储存了,跳转个页面就不行了。


折腾了两个多小时,最后终于找到了真正解决的方法。


其实问题的原理大致是这样的:


当网站的目录结构发生改变的时候,asp.net用于保存session有关的一个程序就会重启,重启之后,所有session对象都会为null,微软官方也给出了说明,在什么情况下会发生这样的情况,不止这几种,有兴趣的同学可以去百度搜一下。


如何解决的这个问题呢,其实很简单,我搜索了半天,网上怎么样回答的都有,我试了一个最简单的方法。下面是具体的操作步骤,然后说明原理。


1在网站的web.config中的<system.web>节点中添加这段配置信息


<sessionState


mode=&#x27;StateServer&#x27;


stateConnectionString=&#x27;tcpip=127.0.0.1:42424&#x27;


sqlConnectionString=&#x27;data source=127.0.0.1;Trusted_Connection=yes&#x27;


cookieless=&#x27;true&#x27;


timeout=&#x27;60&#x27;/>


说明:sessionState:配置网站会话的节点


那什么是会话?会话就是当客户端浏览器向服务器请求数据,服务器与浏览器之间进行交互的情形就叫做会话,就像人和人交流一样。


mode:储存session信息的模式 一种有5种,具体是什么,想知道的自行百度。这里只说明stateserver和默认模式。我们不配置sessionState节点,session服务默认是asp.net提供的一个程序来维护的,就是什么我们提到的那个操纵网站目录结构就会重启的程序;startserver模式就是让我们本地计算机的维护session,怎么维护呢,这个时候就要开启计算机上的一个服务,就在服务列表中,就是ASP.NET State Service这个服务,它是手动开启的,打开它,把它改成自动启动就行了,打开这个服务是最关键的步骤。


sqlconnectionString:连接字符串,就是由指定ip的电脑进行session信息的管理,写成127.0.0.1就是指本机,可以指定开启了ASP.NET State Service服务的其他计算机来维护session,这样可以降低本机的压力。


cookieless:默认为false,就是操控是否开启会话的,没什么说的,详细的自行百度。


timeout:会话的有效时间(单位是分钟)


好了,就是这简单的两步,添加sessionState节点,开启ASP.NET State Service服务就解决了操作服务器文件目录session失效的问题。


学习中找对方法真的很重要,觉得有用的同学可以收藏一下,用到的时候可以提高编程效率。

本文系网站原创,转载请注明文章链接地址