session 1分钟不到就超时

hengjian168520 2017-09-06 03:29:22
客户在 bluehost 购买了空间
程序上传后,进入后台管理中心每次1分钟不到就提示要重新登陆。

session 是这样直接写进去的:
context.Session["CurrentUser"] = name;
请问这样有什么问题么??








...全文
767 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋的红果实 2017-09-09
  • 打赏
  • 举报
回复
用stateServer没什么不好,不过,既然你的系统需要更多资源,为什么不租个大的独立主机呢
webdiyer 2017-09-09
  • 打赏
  • 举报
回复
我的解决办法是把主键数据保存在加密的cookie中,比如用户ID,session中保存敏感的权限以及用户详细信息等,从Session中取值时,如果发现Session为空,就用cookie中获取的用户ID从数据库获取相关信息,并将这些信息保存在Session中,这样就不用担心Session丢失的问题
爛轲 2017-09-08
  • 打赏
  • 举报
回复
引用 12 楼 sp1234 的回复:
不止10年,至少 15年吧。当时只是希望 asp.net 程序员不要连这个基本的知识都要引起争执,希望有个 asp.net 技术底线。可是没想到微软公司在 2006 年开始抛弃 asp.net 了,所以后来也就慢慢地懒得重复强调这个问题了。 这是一个 asp.net 编程基本知识。然而微软 asp.net 没有解决,相关的入门著作(许多事相互抄袭抄袭的水平)也总是把入门者在自己单机上的调试经验作为忽悠的目标。实际上这当然是当你把 asp.net 应用放到(特别是)租赁的网站空间上才会频繁发生的。 因为租赁的空间往往被管理员设置为每一个网站只能用更少的IIS连接数、更少的内存数、更短的时间.......然后系统就会自动释放一次 asp.net 进程。并且 asp.net 自己还会在许多文件稍加改变时自动释放(重启)。还有遇到严重点的 bug 时也会重启..... asp.net 重启其实是个可接受的自我恢复措施。如果没有这个特性,也就不可能让一台那么破的服务器上能跑几百个根本没有怎么高强度长期测试的网站了。 但是既然有这个特性,那么负责设计开发 asp.net 应用的程序员就应该从一开始就知道要避免使用 Session 集合。(假设你使用 ASPNet SeateServer或者它的SQL Server方式序列化 Sesson,你要详细测试并保证所有对象都能反序列化,而这其实增加了困难)
学习了,感谢
  • 打赏
  • 举报
回复
可以这么说吧,你的客户花了买一个低档次小轿车的钱,结果只买到一个破的报废了的三轮车改装的“小轿车”——一个破空间。而你们的 asp.net 开发时又不知道 Session 集合会经常丢失(还以为只是会过期而不会丢失呢)。这两种情况,突出在这个例子中。 那么当然是双方都要付出代价,去改变。
Veary 2017-09-07
  • 打赏
  • 举报
回复
如果使用默认的方式保存Session,有一点风吹草动都有可能造成Session的丢失(如ASP.NET的进程自动调整或重启,可以这么理解),使用SQLServer保存Session或者使用ASP.NET State Service服务保存状态都是不错的选择,上一个项目使用的是ASP.NET State Service,没有发现什么问题,保证在程序运行的时候,ASP.NET State Service服务是启动的就可以,如果发生更改了,手动重启一下这个服务就ok。我只是说了我的用法,可能有不对的地方(不保证全对)你可以详细的找一下关于ASP.NET State Service的内容。
stopheaven 2017-09-07
  • 打赏
  • 举报
回复
引用 11 楼 sp1234 的回复:
从差不多10年前,无数次我(们)都重复说过,asp.net 程序不用 Session 集合,要知道(默认的)Inproc 应用状态管理模式下的 Session 集合、Application集合、static 变量值等等都是随时会随着 asp.net 进程快速重启而完全丢失的。随时会丢失! 所以只有 SessionID 不会丢失(因为它是基于 cookie)。运行中的会话保存的状态数据要保存到数据库,并且使用 Cache 来完成数据高速缓存。
请问StateServer模式 这种模式可取吗?
  • 打赏
  • 举报
回复
不止10年,至少 15年吧。当时只是希望 asp.net 程序员不要连这个基本的知识都要引起争执,希望有个 asp.net 技术底线。可是没想到微软公司在 2006 年开始抛弃 asp.net 了,所以后来也就慢慢地懒得重复强调这个问题了。 这是一个 asp.net 编程基本知识。然而微软 asp.net 没有解决,相关的入门著作(许多事相互抄袭抄袭的水平)也总是把入门者在自己单机上的调试经验作为忽悠的目标。实际上这当然是当你把 asp.net 应用放到(特别是)租赁的网站空间上才会频繁发生的。 因为租赁的空间往往被管理员设置为每一个网站只能用更少的IIS连接数、更少的内存数、更短的时间.......然后系统就会自动释放一次 asp.net 进程。并且 asp.net 自己还会在许多文件稍加改变时自动释放(重启)。还有遇到严重点的 bug 时也会重启..... asp.net 重启其实是个可接受的自我恢复措施。如果没有这个特性,也就不可能让一台那么破的服务器上能跑几百个根本没有怎么高强度长期测试的网站了。 但是既然有这个特性,那么负责设计开发 asp.net 应用的程序员就应该从一开始就知道要避免使用 Session 集合。(假设你使用 ASPNet SeateServer或者它的SQL Server方式序列化 Sesson,你要详细测试并保证所有对象都能反序列化,而这其实增加了困难)
  • 打赏
  • 举报
回复
从差不多10年前,无数次我(们)都重复说过,asp.net 程序不用 Session 集合,要知道(默认的)Inproc 应用状态管理模式下的 Session 集合、Application集合、static 变量值等等都是随时会随着 asp.net 进程快速重启而完全丢失的。随时会丢失! 所以只有 SessionID 不会丢失(因为它是基于 cookie)。运行中的会话保存的状态数据要保存到数据库,并且使用 Cache 来完成数据高速缓存。
dengchenlu 2017-09-06
  • 打赏
  • 举报
回复
可以考虑用数据库存Session,或者用其他第三方的存储
正怒月神 版主 2017-09-06
  • 打赏
  • 举报
回复
引用 7 楼 hengjian168520 的回复:
请问这个 能不能用代码来控制么??
先了解一下 StateServer ,他会单独开一个进程给你保存session。 使用方法网上很多 http://blog.csdn.net/fox123871/article/details/8165431
  • 打赏
  • 举报
回复
引用 7 楼 hengjian168520 的回复:
[quote=引用 5 楼 wangzl1163 的回复:] 我的理解是你买的这个空间分配给IIS的空间太小了,换个大的吧
请问这个 能不能用代码来控制么??[/quote] 空间就那么大跑个空网站就能耗去不少,用代码控制也不能增大空间啊,空间已满新用户登录,如果不回收新增的session放到哪里去?IIS自动回收就会清理掉旧而且当前没有活跃的session,刚才登录的就会掉线。
hengjian168520 2017-09-06
  • 打赏
  • 举报
回复
引用 5 楼 wangzl1163 的回复:
我的理解是你买的这个空间分配给IIS的空间太小了,换个大的吧
请问这个 能不能用代码来控制么??
丰云 2017-09-06
  • 打赏
  • 举报
回复
引用 4 楼 hengjian168520 的回复:
刚刚 bluehost 给我回复的信息。。 工单详细信息
呵呵,简单说,就是你们的程序相对这个空间来说,太耗内存了,直白的意思就是要你给服务器扩容
  • 打赏
  • 举报
回复
我的理解是你买的这个空间分配给IIS的空间太小了,换个大的吧
hengjian168520 2017-09-06
  • 打赏
  • 举报
回复
刚刚 bluehost 给我回复的信息。。 您可以使用out-proc会话状态,将.NET会话状态模式设置为部分内的StateServer 这个不是很理解,麻烦大侠帮忙解决下。 您好, We have set a time out value of 20 mins for IIS session service. Please note the application pool is recycled if it is idle for more than 5 mins. Thus, the inproc session is lost. 我们已经设置IIS会话超时时间为20mins,需要注意当空闲时间超过5mins时应用池会自动回收,因此inproc会话会随之丢失。 This is implemented in our servers to prevent abuse of resources. Note that changing the timeout value in the web.config file will not work. 以上的限制被应用在我司的主机来防止资源滥用。需要注意在web.config修改 timeout value是不会生效的。 Losing sessions happens whenever the application pool is recycled, and hence all session ids are dropped. There is limitation of 150 MB memory for the application pools. 当应用池回收的时候就会出现会话超时,因此所有的会话id都会掉线。win主机应用池限制的内存的150M,不能超过这一限制。 While it is understandable as to why set such a limit, problem is that limit is very low for .net websites that are poorly coded, since an empty website already needs 30 MB, 对于虚拟主机存在这种限制是很正常的,同时对于一些网站问题也就随之而来,那些代码优化程度不高的网站更是如此,因为一个空的网站就需要30MB, so as soon as you add database and get traffic, it easily goes above 100 MB, causing the application pool to restart and session is lost having all your visitors logged out. 然后又加上数据库以及网站的访问,很容易超过100MB,一旦超过限制就会导致应用池回收、网站会话超时而跳出登录需要重新登录。 Below are some of the few things that one can look to do: 下面是一些供参考的解决方案: Ways to optimize your websites to run under 150MB. 优化网站 SessionState = StateServer By default, .net websites use in-proc session state to keep session information, in-proc sessions are kept in the application pool. So, to avoid depending on the application pool, 默认情况下,.net网站使用in-proc会话状态来保留会话信息,in-proc会话保存在应用程序池中。 所以,为了避免依赖于应用程序池, you can use out-proc session state, to do so set the .NET session state mode to StateServer inside the section: 您可以使用out-proc会话状态,将.NET会话状态模式设置为部分内的StateServer: ----- http://pastebin.com/hDghbjdS ------ Machine Key If this still doesn't work (session keep resetting), means the StateServer mode still not being used. Then you can try adding a machineKey. Please check the following link for more details. 如果这仍然不起作用(会话保持重置),则表示StateServer模式仍未被使用。 然后你可以尝试添加一个machineKey。 请查看以下链接了解更多详情。 ----- http://pastebin.com/0QAqYt11 ----- 如果您有任何问题,您可以随时直接回复该邮件获取更多的帮助,我们将在收到您的回复后尽快为您处理您的问题。 请勿重复提交您的问题,以免出现长时间无法处理您的问题或不同技术员检查后出现重复处理的情况。 在关闭状态下的工单,在系统收到您回复之后,系统将会再次开启该工单,因此您无需担心错过你提交的每一个问题。 感谢您对Bluehost的支持。 工单详细信息
正怒月神 版主 2017-09-06
  • 打赏
  • 举报
回复
如果应用程序池的回收时间和session的过期时间都设置过,或者没有改动过。 那就可能是代码问题
hengjian168520 2017-09-06
  • 打赏
  • 举报
回复
引用 1 楼 peng2739956 的回复:
设置下过期时间。
web.config 里面也设置过了 <sessionState mode="InProc" timeout="60"/> 还是没反应。。 请问高手们有没有遇到过。帮忙解决下。。
peng2739956 2017-09-06
  • 打赏
  • 举报
回复
设置下过期时间。

62,243

社区成员

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

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

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

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