我有一个基于角色的ASP.NET C#Web应用程序,我将菜单对象放在会话中,并且我在web.config中配置了会话超时,如下所示:
<forms defaultUrl="Home.aspx" loginUrl="Login.aspx" name=".ASPXFORMSAUTH" timeout="10"></forms>
我首先以员工身份登录系统并等待会话到期,然后当我单击菜单中的链接时,我正确地使用ReturnUrl参数重定向到登录页面。现在,当我尝试以管理员身份登录系统时,我仍然看到员工菜单,而不是管理员菜单。加载菜单1st的方法检查以查看菜单会话对象是否为空,如果是,则从会话加载菜单,否则它构建菜单并将其放入会话。因此,当系统超时时,菜单会话对象未被清除。我怎样才能解决这个问题?
答案 0 :(得分:1)
当您以管理员身份登录时,请确保您没有重复使用同一浏览器。如果您以员工身份登录,然后以具有相同浏览器窗口的管理员身份登录,那么您可能会意外地重复使用同一会话。添加一些跟踪或断点以验证您的菜单是否在您预期的时候构建,而不是简单地退出会话。
如果这不是问题,那么当您跟踪或单步执行代码时,请验证您的应用程序是否正确识别用户是管理员并正在构建正确的菜单。
答案 1 :(得分:1)
您还需要在会话中设置超时,并确保它与验证超时的超时值相同。
<sessionState cookieless="UseCookies" timeout="10" useHostingIdentity="true"/>
这应该在身份验证到期的同时终止会话。