日期:2014-05-17  浏览次数:20349 次

Session传值的限制
在做一个小网站,登录以后,把User放到Session里面,然后登录界面转到功能界面,从功能界面把User从Session里面取出来。

原来User的结构简单,没有发现什么问题,现在为了更加清晰,把User的数据结构放在User里面,另外定义了一个User_info的类,作为User的成员,例如:

Public string name_login;
Public string user_department;
Public cs_user_info user_info;

然后,在登录界面,把user_info实例化:

user_info=new cs_user_info();

user_info.load_user_info();

之后,把带着user_info的User放到Session里面,再到功能界面,取出来:

my_user=(User)Session["current_user"];

然后,调用user的user_info的属性:
string photo_url=my_user.user_info.photo;

这个时候,系统提示,没有将对象实例化。

现在的问题是:

明明在放到Session之前,已经把user_info实例化了,取出来后,怎么就没有实例化了呢?

是需要跟User一样,取出来之后还要做一次类型转化,还是说,Session中object成员中的类,无法储存,只能取出以后,重新做一次实例化?

请各位大侠指导!先谢谢啦!
------最佳解决方案--------------------
肯定是登陆界面跳转的时候保存sesson值,sesson可以保存类的实例,你调试一下看看是不是保存进seeson前没有实例化user_info就保存了。
------其他解决方案--------------------
session适合传递一些简单的类型,如果你要传复杂的,可以使用viewstate
------其他解决方案--------------------
 [Serializable]
 public class User
------其他解决方案--------------------
以前也用过seesion做登陆,痛苦的掉失数据,后来一直用form表单验证,这也是微软推荐的方式
------其他解决方案--------------------
你的Session是设置的什么模式?是InProc的还是 state server的?
------其他解决方案--------------------
引用:
回复6楼,默认状态

那么检查下是不是session丢失了
------其他解决方案--------------------
是因为Session的缘故吗?如果是这样,可以设计在登录界面,User.user_info暂时不做实例化,等到到了各个功能界面,需要时候再做。
------其他解决方案--------------------
回复6楼,默认状态
------其他解决方案--------------------
引用:
然后,调用user的user_info的属性:
string photo_url=my_user.user_info.photo;

这个时候,系统提示,没有将对象实例化。

user_info 实例化后, 重新对session付值了吗?
你的代码贴得不全
------其他解决方案--------------------
引用:
session适合传递一些简单的类型,如果你要传复杂的,可以使用viewstate

MARK
------其他解决方案--------------------
调试时最好的老师,user_info是否为null
------其他解决方案--------------------
回复11楼,是null,但是我已经在登录界面对它进行了实例化,并且部分属性还做了赋值。
------其他解决方案--------------------
回复9楼,的确不全,只是伪代码表示一下而已,应该能看懂的。
------其他解决方案--------------------
引用:
回复11楼,是null,但是我已经在登录界面对它进行了实例化,并且部分属性还做了赋值。

说明在传值的过程中丢失了,你不想贴代码的话就自己走一遍调试
------其他解决方案--------------------
你尝试session中保存一简单的字符串。
------其他解决方案--------------------
引用:
回复11楼,是null,但是我已经在登录界面对它进行了实例化,并且部分属性还做了赋值。

是能看懂,可是问题没有在你贴出来的代码里。
User的实例,改变部分属性之后, 是不是重新 存回Session["current_user"]里面了?


------其他解决方案--------------------
结账吧,实践证明,Session可以传递结构复杂的实例,木有问题,稳定性另说。这个问题的原因,是我把一个状态搞反了