日期:2014-05-18  浏览次数:20465 次

关于session 的属性付植了以后没有过生存期,但是取不到属性的值了?
小第有个问题,百思不得其解啊,就是当我第一次进入页面时,显示登陆框,并给session["view"]付值,
下一次进入时,则判断session["view"],如果不等于null则就不显示登陆框了 代码如下:
protected void Page_load()
{
if(session["view"]==null)
{
session["view"]=1;
getLogin();//显示登陆框
return;
}
string type=(string)Request["btnhtype"];

switch(type)
{
case "copy" :{break;}
case "delete":
{
string path=(string)Request["path"];
if(Directory.Exsits(path){Directory.Delete(path};}
break;
}
default:break;
}

按道理逻辑应该是对的啊,显示登陆框,则session["view"]=1;那下一次进入时session["view"]!=nll了
但是有个奇怪的现像,当我的地址为http://127.0.0.1/myaspx?btntype=delete&path=F:/123
依照程序他会删除f:\123这个目录,此时我在进入http://127.0.0.1/myaspx?btntype=copy
登陆框又显示了,我加了断点调试,发现执行了http://127.0.0.1/myaspx?btntype=delete&path=F:/123后
session["view"]的值==null了,这是为什么,我可以肯定不是session生存期的问题,因为我设过session.timeout=20;
各们大侠来看看,为什么session["view"]明明付过值,但是在又为null了呢???

------解决方案--------------------
很正常。Session有上百种可能性“丢失”,删除目录就是一种。有人号称配置一下服务器于是Session就不丢失了,实际上使用你为他根本说不清Session丢失的“所有原因”。实际上,太多原因了。

所以我对于商品化asp.net开发的做法是:不使用Session来保存数据。

当然,你也可以是使用状态服务器管理Session。我不去假设软件的用户都拥有状态服务器,所以也不能使用状态服务器。

不使用Session,你可以使用很多手段持久化对象(例如保存在业务数据库中),并且将对象持久化与数据Cache综合起来来提高性能。