+ -
当前位置:首页 → 问答吧 → 求助,asp.net 多个页面传递Session后,值丢失

求助,asp.net 多个页面传递Session后,值丢失

时间:2011-12-12

来源:互联网

A页面给Session赋值后,Response.Redirect到B页面后Session有值,再从B页面Response.Redirect到C页面后,获取不到Session的值,请问谁知道怎么解决
Framework版本 4.0
使用VisualStudio开发服务器
asp.net状态服务已开启,页面中已设置 EnableSessionState="True"

作者: SunBo8   发布时间: 2011-12-12

设置Session有效期,另外Session本来就不问题。可以尝试换用Cookies。

作者: CODE163   发布时间: 2011-12-12

默认是20分钟过期,你可以修改这个设置。

页面之间也可以用URL传

session在服务器端有3处存储的位置
本服务器进程中 单独其他服务器进程外 数据库里

3种方式各有优劣 本服务器进程中的话如果你的系统在好几个服务器那么是不可以共享也就是出现丢失的情况

单独其他服务器进程外 和 数据库里 可以共享session 但是速度慢 需要再web.config里配置

如果数据不是很敏感用URL传值即可

或者自己写个编码加个密 自己揭秘 这样就好了 

作者: 21aspnet   发布时间: 2011-12-12

谢谢各位,Sessoin应该没有过期,进入B页面后立刻进入的C页面,
其它方式我知道,我是想弄明白问题到底出在哪里

作者: SunBo8   发布时间: 2011-12-12

就算你得Session 没有过期 只要IIS 相关进程有一点点的蛋疼 往往Session就没了, 除非你把Session放进数据库做持久化。

作者: CODE163   发布时间: 2011-12-12

现在的问题是只要从B到C,Session肯定没有
或者从C到B,也没有,而redirect到的第一个页面是肯定有Session的

作者: SunBo8   发布时间: 2011-12-12

通常情况下,Session是根据cookie里面的sessionid决定的,所以能否保持得住cookie里面的sessionid才决定会话是否没丢失。

cookie丢失的原因之一:
cookie是大小写区分的,所以访问的domain、path的大小写是有影响的。先检查一下你redirect时的A B C 页面的域名部分和虚拟目录部分是否有大小写问题。
当然还有其他丢失的原因:
如 超出限制路径,通常发生在一个虚拟目录应用程序访问上级网站时的情况。还有就是一个虚拟目录程序访问另一个虚拟目录程序。
还要检查 A B C是否在同一个域里面,例如都是www.aa.com下面的网址。 cookie本身是不具备跨域能力的。

作者: gzdiablo   发布时间: 2011-12-12

session虽然可以做这样安全的传参。但是楼主 session同时也很脆弱
iis的进程稍微一点问题 或者 程序的稍微一点的差错都可以导致他丢失 初始化,无论时间多长

如果不是很重要的参数 cookie或者是url都可以了

作者: id270   发布时间: 2011-12-12

这样传,会引起混乱,已丢失,我建议还是用拼接字符串,Querystring ? id=?

作者: jiayouwenzhiyi   发布时间: 2011-12-12

谢谢大家,我找到原因了,是程序写的有问题Session被赋值给了一个不一定有返回值的函数
散分了

作者: SunBo8   发布时间: 2011-12-12