session丢失问题

jing3jing2009 2011-07-20 11:47:40
问大家一个问题,session丢失的问题,

我在第一个页面给session赋值
this.Session["common"] = "123";
,然后转到第二个页面去获取这个session

this.Response.Redirect("2.aspx?r=" + r.ToString(), false);

结果,就不行了,this.Session["common"]为空

不是所有的用户都会丢失的,只有很少的一部分用户会丢失,请大家说说是怎么回事。应该如何解决。
客户端的浏览器已经把cookie打开了。
...全文
83 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
gengchenhui 2011-07-21
  • 打赏
  • 举报
回复
我看sp的大概意思是,因为你重定向了,所以这个页面的html并没有发到浏览器端,所以这个页面的Cookie并没有保存你新添加的SessionID,重定向以后,服务器来取客户端Cookie里面的SessionID,根本取不到。。。
不知道sp是不是这个意思。。。
jing3jing2009 2011-07-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zxy397472251 的回复:]
Sessio和COOKIE无关
设置Sessio过期时间长一些
[/Quote]
不是session过期的问题,第一个页面赋值后,马上跳到第二个页面取值,就不行了。
jing3jing2009 2011-07-20
  • 打赏
  • 举报
回复
程序很简单,就是第一个页面赋值,第二个页面取值。没有其他页面了。
种草德鲁伊 2011-07-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 jing3jing2009 的回复:]

不是所有的用户都会丢失的,客户端的浏览器已经把cookie打开了。

[/Quote]

我觉得是楼主自己的程序有问题
yue547283947 2011-07-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 jing3jing2009 的回复:]
问大家一个问题,session丢失的问题,

我在第一个页面给session赋值
this.Session["common"] = "123";
,然后转到第二个页面去获取这个session

this.Response.Redirect("2.aspx?r=" + r.ToString(), false);

结果,就不行了,this.Session["common"]为空

……
[/Quote]

如果是偶尔,那就正常,也没办法。。。

如果是一直都是这样,就说明sesson用法错误,或者别的地方自动对这个sesson操作了。


this.Session["common"] = "123";
不加this this应该有一定的作用域
CqCoder 2011-07-20
  • 打赏
  • 举报
回复
Sessio和COOKIE无关
设置Sessio过期时间长一些
快乐的小二兔 2011-07-20
  • 打赏
  • 举报
回复
this去掉试试。。
huayy 2011-07-20
  • 打赏
  • 举报
回复
如果只是非常少的情况,我就不清楚了。
如果比较频繁,在IIS里面有一个设置的。百度一下吧!
jing3jing2009 2011-07-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sp1234 的回复:]
有的时候根本没有丢失,可能是你代码有问题。比如还没有向session集合保存数据,就急于弹出新的页面,那么新的页面跟它的父页面,其实就是两个Session。

因为——只有当你第一次保存Session数据之后,你的会话才算定性,才不会再随机改变了。
[/Quote]
代码执行的顺序是:先给session赋值,然后才跳转的。
主要是并不是所有用户都丢失,只是很少一部分用户会,几率大概在几万分之一,我这边的环境都可以的,只是偶尔个别用户反应不行。感觉应该是redirect的问题。
  • 打赏
  • 举报
回复
嗯,我再把机制用大白话说的更明白一点。只有你向Session集合中保存数据,并且页面正常输出给浏览器时,在cookie中才会有SessionID。以后请求服务器时在其http消息的头中才会有总是用这个固定的SessionID。

假设你第一次保存数据到Session数据时,就重定向了,那么浏览器重定向访问服务器时根本不会提交准确的SessionID的cookie值,因为根本没有从服务器输出到客户端过!
  • 打赏
  • 举报
回复
比如说你从来都没有向session集合中保存过数据,那么当你向session集合中保存数据并且当前急于重定向,新的页面根本不是前一个会话。

你应该至少先在一个页面保存过session数据,然后以后的页面才进行这种又保存session数据又重定向的操作。因为以前的页面的那个操作决定了session定性了、不再随机改变了。
  • 打赏
  • 举报
回复
有的时候根本没有丢失,可能是你代码有问题。比如还没有向session集合保存数据,就急于弹出新的页面,那么新的页面跟它的父页面,其实就是两个Session。

因为——只有当你第一次保存Session数据之后,你的会话才算定性,才不会再随机改变了。
SK_Aqi 2011-07-20
  • 打赏
  • 举报
回复
好像有过,建一个简单的测试一下行么?
truecoffeefox 2011-07-20
  • 打赏
  • 举报
回复
和this无关,可能还是与你的代码或者环境有关
子夜__ 2011-07-20
  • 打赏
  • 举报
回复
xianghao_zhixiu 2011-07-20
  • 打赏
  • 举报
回复
string common=this.Session["common"].ToString(); 或者把Session.Timeout = "10"(以分钟为单位,默认值是20分钟);

62,072

社区成员

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

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

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

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