Session传值的限制

attidust 2012-11-30 08:59:50
在做一个小网站,登录以后,把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成员中的类,无法储存,只能取出以后,重新做一次实例化?

请各位大侠指导!先谢谢啦!
...全文
238 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
rayaspnet 2012-11-30
  • 打赏
  • 举报
回复
引用 12 楼 attidust 的回复:
回复11楼,是null,但是我已经在登录界面对它进行了实例化,并且部分属性还做了赋值。
是能看懂,可是问题没有在你贴出来的代码里。 User的实例,改变部分属性之后, 是不是重新 存回Session["current_user"]里面了?
马老虎 2012-11-30
  • 打赏
  • 举报
回复
你尝试session中保存一简单的字符串。
ltcszk 2012-11-30
  • 打赏
  • 举报
回复
引用 12 楼 attidust 的回复:
回复11楼,是null,但是我已经在登录界面对它进行了实例化,并且部分属性还做了赋值。
说明在传值的过程中丢失了,你不想贴代码的话就自己走一遍调试
attidust 2012-11-30
  • 打赏
  • 举报
回复
回复9楼,的确不全,只是伪代码表示一下而已,应该能看懂的。
attidust 2012-11-30
  • 打赏
  • 举报
回复
回复11楼,是null,但是我已经在登录界面对它进行了实例化,并且部分属性还做了赋值。
ZhuZhuYuXiang 2012-11-30
  • 打赏
  • 举报
回复
调试时最好的老师,user_info是否为null
tiantian2324 2012-11-30
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
session适合传递一些简单的类型,如果你要传复杂的,可以使用viewstate
MARK
rayaspnet 2012-11-30
  • 打赏
  • 举报
回复
引用 楼主 attidust 的回复:
然后,调用user的user_info的属性: string photo_url=my_user.user_info.photo; 这个时候,系统提示,没有将对象实例化。
user_info 实例化后, 重新对session付值了吗? 你的代码贴得不全
ltcszk 2012-11-30
  • 打赏
  • 举报
回复
引用 7 楼 attidust 的回复:
回复6楼,默认状态
那么检查下是不是session丢失了
attidust 2012-11-30
  • 打赏
  • 举报
回复
回复6楼,默认状态
wyumening 2012-11-30
  • 打赏
  • 举报
回复
你的Session是设置的什么模式?是InProc的还是 state server的?
CSMSDN 2012-11-30
  • 打赏
  • 举报
回复
以前也用过seesion做登陆,痛苦的掉失数据,后来一直用form表单验证,这也是微软推荐的方式
xuan.ye 2012-11-30
  • 打赏
  • 举报
回复
[Serializable] public class User
快溜 2012-11-30
  • 打赏
  • 举报
回复
肯定是登陆界面跳转的时候保存sesson值,sesson可以保存类的实例,你调试一下看看是不是保存进seeson前没有实例化user_info就保存了。
attidust 2012-11-30
  • 打赏
  • 举报
回复
是因为Session的缘故吗?如果是这样,可以设计在登录界面,User.user_info暂时不做实例化,等到到了各个功能界面,需要时候再做。
bdmh 2012-11-30
  • 打赏
  • 举报
回复
session适合传递一些简单的类型,如果你要传复杂的,可以使用viewstate
attidust 2012-11-30
  • 打赏
  • 举报
回复
结账吧,实践证明,Session可以传递结构复杂的实例,木有问题,稳定性另说。这个问题的原因,是我把一个状态搞反了 耽误大家时间啦……
目 录 1 PHP接口安全 4 1.1 指定公布给外部的资源,客户端只能访问允许访问的资源 4 1.1.1 说明 4 1.1.2 应对 4 1.1.3 举例 4 1.2 定义所有接口的参数,并做严格的检查 5 1.2.1 说明 5 1.2.2 应对 5 1.2.3 举例 5 1.3 不能让客户端看到任何不友好的错误信息 5 1.3.1 说明 5 1.3.2 应对 5 1.3.3 举例 5 二、PHP编码安全 6 2.1 POST/GET参数传值/字符串输入/数据入库等严格的危险字符过滤处理 6 2.1.1 说明 6 2.2.2 应对 6 2.2.3 举例 6 2.2 相关PHP的I/O操作,需要注意限制权限,文件名或目录名或内容都要做好过滤处理 8 2.2.1 说明 8 2.2.2 应对 8 2.2.3 举例 8 2.3 敏感信息(如PASSWORD/银行帐号等)不要依赖COOKIE,SESSION,最好读表,并尽量缓存读表数据 8 2.3.1 说明 8 2.3.2 应对 9 2.3.3 举例 9 2.4 注意对网站根目录及下面所有子目录及文件的权限控制与保护,不要让配置文件/系统信息等文件暴露 10 2.4.1 说明 10 2.4.2 应对 10 2.4.3 举例 10 2.5 屏蔽或定制化出错信息 10 2.5.1 说明 10 2.5.2 应对 11 2.5.3 举例 11 2.6 数据库的读取等操作、POST/GET传值需要做频率限制与Token校验 11 2.6.1 说明 11 2.6.2 应对 11 2.6.3 举例 11 2.7 有类似文件下载/或文本流下载等功能的,尽量避免使用URL直接调用目标文件地址的方式 12 2.7.1 说明 12 2.7.2 应对 12 2.7.3 举例 12 2.8 MYSQL 的用户最好分开,不要用ROOT用户来连接MYSQL 13 2.8.1 说明 13 2.8.2 应对 13 2.8.3 举例 13 3 参考内容 13

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧