我遇到了asp.net c#网站的问题,我将会话状态对象设置为true,然后重定向到需要检查会话状态对象值的另一个页面,它为空。
有时它设置正确,其他时间只是空。
当我在本地机器上调试时,它每次都能正常工作。只有当我上传到我的网络服务器时才会发生这种气质行为。
由于它基于网站的安全性,因此每次会话数据的有效性和准确性显然非常重要。
会话状态数据不可靠吗?
AFAIK设置为inproc,无cookie,30分钟超时,IIS的vanilla安装。
有没有人有任何建议?也许我需要在存储会话数据和读取之间进行thread.sleep?
注意:写入和读取之间的时间约为70ms ..数据写入RAM的时间充足.....
答案 0 :(得分:2)
没有。听起来你是在滥用会话状态。您不能依赖用户的会话。您的ASP.NET工作进程可以回收,重新启动应用程序并终止所有会话,或者文件可能在您的网站中发生更改,导致您的应用程序重新启动并刷新所有会话,Cookie可能会在客户端上刷新,可能会发生超时等。
因此,您必须使用会话状态提供所有这些方案。尽量避免使用会话状态来做这样的事情。如果您在会话状态中设置访问权限并且您不确切知道它是如何工作的,那么您可能会打开您的网站以承担很多安全风险。
答案 1 :(得分:2)
所有内容都指向Web场。如果在为您的应用程序提供服务的生产环境中有不同的Web服务器,您将尝试此行为。
我没有找到任何其他解释这个“在我的机器上工作!”
答案 2 :(得分:2)
我对你的特定问题没有答案,但克劳迪奥可以做些什么。
我要说的是,使用会话来保证安全性是90年代。从字面上看。
开发FormsAuthentication是为了取代这种技术,并且做得非常好。
你应该只依靠会话来处理容易恢复的微不足道的问题。
安全不是其中之一。
答案 3 :(得分:1)
如果会话状态丢失,通常是因为您的流程要么循环使用,要么失败。我永远不会“依赖”页面之间的会话状态。相反,您可能希望尝试以某种其他方式在页面之间保留数据。也许通过表单变量传递信息或将数据保存在数据库中。
ASP.NET Profiles是保存此类信息的首选方式。您可能需要阅读ASP.NET State Management Recommendations。