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可以传递结构复杂的实例,木有问题,稳定性另说。这个问题的原因,是我把一个状态搞反了