7
|
Dan · 技术社区 · 16 年前 |
1
7
您试图区分超时会话和手动注销的会话? 您的问题是,由于会话数据已不存在,因此您需要继续执行的操作是,传入的新请求已创建了一个新会话,传入的请求带有会话ID cookie(表示它以前已登录)。 有两种方法。 饼干:
首先在登录页面中,您可以创建一个额外的cookie,指示用户的登录状态。当用户手动注销时,将修改cookie值以指示注销。会话超时后的请求将
数据库: 第二种方法是将sessionid与登录状态一起存储在DB表中。登录成功后,将sessionID输入LoggedOnSessions表。当用户手动注销时,从表中删除sessionID。因此,如果存在超时,则可以在表中查找会话ID(此时可能还应该删除该ID)。 出于内务管理的目的,您应该包含一个expiry datetime字段,该字段的设置时间要比任何实际的登录周期(例如一周)长得多。定期(如每周)删除表中已过期的条目。 我最喜欢的是数据库方法,我讨厌设置cookie,因为每次请求都会发送cookie,但很少需要。 |
2
-1
您还可以在标记下面的web.config文件中查找 身份验证 . 应该是这样的:
注意属性 模式 ,它可能会在web.config文件中显示窗体而不是窗口。在这种情况下,如果您丢失会话,然后单击任何链接(比方说SalesChart.aspx),ASP.NET将直接带您登录Login.aspx codebhind,而不是SalesChart.aspx codebhind,后者特别烦人。 如果您尝试Windows模式,每次都会转到请求的页面(SalesChart.aspx),然后自行决定会话丢失时要采取的操作。 |