session丢失

Caoxp_papa 2009-12-16 11:22:15
用Response.Redirect跳转页面,跳转之前session有值,但是跳转到那个页面的Page_Load()里边就显示为null。
怎么回事啊?
...全文
127 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
满衣兄 2009-12-16
  • 打赏
  • 举报
回复
Response.Redirect("url",false);
用这个试一下。
为 True的话表示立刻中止线程,不再执行Redirect后的语句; False的话,依然后执行Redirect后的语句。
参考:http://msdn.microsoft.com/zh-cn/library/aa332829(en-us,VS.71).aspx
yanlong521521 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 caoxp_papa 的回复:]
引用 3 楼 yanlong521521 的回复:
修改了config、重命名目录等都会导致session的丢失,在网上有人说如果img 的src=""也会导致session的丢失(没测试过),如果只是做验证,可以考虑采用cookie

我是重命名目录了 ,怎么能够保存session呢
[/Quote]
尽量避免重命名目录,如果避免不了,可以用cookie存信息或存到数据库去
或者你试下在sessionState标签中有个属性mode,它可以有3种取值:InProc、StateServer、SQLServer,默认是InProc,你改成其他试试
Lovely_baby 2009-12-16
  • 打赏
  • 举报
回复
建议直接使用URL传值~~
Im_Sorry 2009-12-16
  • 打赏
  • 举报
回复
up
long123x 2009-12-16
  • 打赏
  • 举报
回复
看6楼的...
楼主试试,感觉蛮强大~
Caoxp_papa 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 long123x 的回复:]
Server.Transfer("URL");

看到楼上几个的回答,推荐个跳转..
顺便看看有没人指出下,这种跳转会不会丢session

学习~
[/Quote]
这种跳转我试了能保存,可以以后每个跳转都要用Server.Transfer("URL");保存,
但是我点击左框架中的超链接时,右框架中有没有session了。
Bingoguy 2009-12-16
  • 打赏
  • 举报
回复
win2003 server下的IIS6默认设置下对每个运行在默认应用池中的工作者进程都会经过20多个小时后自动回收该进程,造成保存在该进程中的session丢失。

因为Session,Application等数据默认保存在运行该Web应用程序的工作者进程中,如果回收工作者进程,则会造成丢失。

解决办法:

修改配置,设置为不定时自动回收该工作者进程,比如设置为当超出占用现有物理内存60%后自动回收

该进程。通过使用默认应用程序池,可以确保多个应用程序间互相隔离,保证由于一个应用程序的崩溃不会影响另外的Web应用程序。还可以使一个独立的应用程序运行在一个指定的用户帐号特权之下。

如果使用StateServer方式或者Sql Server数据库方式来保存Session,则不受该设置的影响。


可能的原因2:

系统要运行在负载平衡的 Web 场环境中,而系统配置文件web.config中的Session状态却设置为InProc(即在本地存储会话状态),导至在用户访问量大时,Session常经超时的情况。引起这个现象的原因主要是因为用户通过负载平衡IP来访问WEB应用系统,某段时候在某台服务器保存了Session的会话状态,但在其它的WEB前端服务器中却没有保存Session的会话状态,而随着并发量的增大,负载平衡会当作路由随时访问空闲的服务器,结果空闲的服务器并没有之前保存的Session会话状态。


解决办法:
1.当您在负载平衡的 Web 场环境中运行 ASP.NET Web 应用程序时,一定要使用 SqlServer 或 StateServer 会话状态模式,在项目中我们基于性能考虑并没有选择SqlServer模式来存储Session状态,而是选择一台SessionStateServer 服务器来用户的Session会话状态。我们要在系统配置文件web.config中设置如下:
<sessionState mode="StateServer" cookieless="false" timeout="240" stateConnectionString="tcpip=192.168.0.1:42424" stateNetworkTimeout="14400" />

还要添加一项
<machineKey validationKey="78AE3850338BFADCE59D8DDF58C9E4518E7510149C46142D7AAD7F1AD49D95D4" decryptionKey="5FC88DFC24EA123C" validation="SHA1"/>

2. 我们同时还要在SessionStateServer 服务器中启动ASP.NET State Service服务,具体设置:控制面板>>管理工具>>服务>>ASP.NET State Service,把它设为自动启动即可。

3. 每台前端WEB服务的Microsoft“Internet 信息服务”(IIS)设置
要在 Web 场中的不同 Web 服务器间维护会话状态,Microsoft“Internet 信息服务”(IIS) 配置数据库中 Web 站点的应用程序路径(例如,\LM\W3SVC\2)与 Web 场中所有 Web 服务器必须相同。大小写也必须相同,因为应用程序路径是区分大小写的。在一台 Web 服务器上,承载 ASP.NET 应用程序的 Web 站点的实例 ID 可能是 2(其中应用程序路径是 \LM\W3SVC\2)。在另一台 Web 服务器上,Web 站点的实例 ID 可能是 3(其中应用程序路径是 \LM\W3SVC\3)。因此,Web 场中的 Web 服务器之间的应用程序路径是不同的。我们必须使Web 场Web 站点的实例 ID 相同即可。你可以在IIS中把某一个WEB配置信息保存为一个文件,其他Web 服务器的IIS配置可以来自这一个文件。您如果想知道具体的设置请访问Microsoft Support网站。
long123x 2009-12-16
  • 打赏
  • 举报
回复
Server.Transfer("URL");

看到楼上几个的回答,推荐个跳转..
顺便看看有没人指出下,这种跳转会不会丢session

学习~
Caoxp_papa 2009-12-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yanlong521521 的回复:]
修改了config、重命名目录等都会导致session的丢失,在网上有人说如果img 的src=""也会导致session的丢失(没测试过),如果只是做验证,可以考虑采用cookie
[/Quote]
我是重命名目录了 ,怎么能够保存session呢
yanlong521521 2009-12-16
  • 打赏
  • 举报
回复
修改了config、重命名目录等都会导致session的丢失,在网上有人说如果img 的src=""也会导致session的丢失(没测试过),如果只是做验证,可以考虑采用cookie
满衣兄 2009-12-16
  • 打赏
  • 举报
回复
Response.Redirect的机制是中止线程之后跳转,这个过程引发了一个异常,有可能这个异常导致了session的丢失。
可以用url传值或者换用你认为合适的方法。
long123x 2009-12-16
  • 打赏
  • 举报
回复
Session.Timeout
指定下时间试试.

62,264

社区成员

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

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

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

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