今天用asp.net写网站,有一个需求需要在服务器上动态生成目录、删除目录,在这里遇到一个很特别神奇的事情,写好了处理目录的逻辑之后再运行的时候发现所有和session有关的操作全部都失效了,用户登录之后进入首页,因为页面加载的时候要判断储存用户信息的session是否存在,刚登录进去就立刻跳转到login登录界面了,发现这个现象的时候各种调试都找不出原因,后来在网上一搜索发现原来是因为操作了网页的目录。
然后我想session不能用了cookie总好使吧,谁知道cookie也不行~~~
cookie不行了再试试静态类能不能用,调试了一下也不能用,储存的值改变它的时候是储存了,跳转个页面就不行了。
折腾了两个多小时,最后终于找到了真正解决的方法。
其实问题的原理大致是这样的:
当网站的目录结构发生改变的时候,asp.net用于保存session有关的一个程序就会重启,重启之后,所有session对象都会为null,微软官方也给出了说明,在什么情况下会发生这样的情况,不止这几种,有兴趣的同学可以去百度搜一下。
如何解决的这个问题呢,其实很简单,我搜索了半天,网上怎么样回答的都有,我试了一个最简单的方法。下面是具体的操作步骤,然后说明原理。
1在网站的web.config中的<system.web>节点中添加这段配置信息
<sessionState
mode='StateServer'
stateConnectionString='tcpip=127.0.0.1:42424'
sqlConnectionString='data source=127.0.0.1;Trusted_Connection=yes'
cookieless='true'
timeout='60'/>
说明: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失效的问题。
学习中找对方法真的很重要,觉得有用的同学可以收藏一下,用到的时候可以提高编程效率。
本文系网站原创,转载请注明文章链接地址