昨天晚上加班赶工到今天下午时,一直被一个莫名其妙的问题困恼!
一个后台项目,在登录时获取基础信息保存到指定命名的Session中,登录成功后跳转页面,然后在跳转的页面后台加载Session时,发现获取不到前面保存的值,而且SessionID也发生了变化。
因为手头上还有另外一个项目,里面保存的Session方式和当前这个项目基本是一样的方式。但另一个正常,这个就取不到。
P.S. 也不是说这个项目从一开始就取不到。这是旧项目,在其基础上做修改。我只是在登录时增加了几个保存的信息和修改了几个之前保存信息的类型。然后增加和修改的就死活取不到,都是NULL;
后来请教了一个大神级的同事帮着看,但他也一时半会没发现哪里有问题。后来他说发现Session会话被取消了(原话忘记怎么说的了,但大体是这个意思)
经他这么一提醒,我把整个解决方案里出现过会话取消的语句,都搜查了一遍,发现了三四处。然后分别打上断点。
其中项目的起始页Login.aspx里的后台Load事件中,我早先加了清Session的语句,Session.Abandon();
在运行时,发现当保存完信息后,跳转新页面前,还会再次执行一遍Load事件里的这个取消会话语句;
到此,确认问题所在了!后来加了个 if(!isPostBack) 来限制只在页面第一次加载时执行一次。又因为同事大神告知,最好别用这个Session.Abandon(),改为Session.Clear();比较好,网上查了两者的介绍后,就改成Clear方法了。
总结,早先为了程序的严谨和释放资源,结果胡乱加了些不是很理解的语句。导致后来出现的奇怪问题。自己把自己坑了。。。
以此做个记录,同时希望能帮助后来者!