0

我想知道如何编写代码以保持用户长时间登录。目前对于用户身份验证和维护日志记录状态,我在母版页上使用 Session ,但我的会话在短时间内到期。我在 gmail、facebbok、stackoverflow 等许多网站上都见过。一旦用户登录,他/她就可以在不再次登录的情况下登录几次。

4

3 回答 3

1

如果您的网站每周只有几百个访问者,那么只需增加会话的超时时间就足够了。

如果您的站点有点忙,增加会话超时将填满大量可用于其他事情的内存,尤其是当您在会话中存储大量内容时。要使会话工作并保持登录状态,与用户浏览器中设置的 cookie 中的会话令牌匹配的会话需要存在。

会话过期的一个很好的原因是摆脱占用内存的会话,这些会话属于您网站的访问者永远不会回来或无论如何都不需要会话的搜索引擎机器人。

为了弥补这个问题,Facebook 和 Google 等网站在浏览器的 cookie 中存储了一个长哈希令牌。他们将此令牌(或它的散列版本)保存在他们的服务器上并将其与您的用户帐户相关联,因此当您回来时,服务器知道是您,它可以为您创建一个全新的会话(假设 FB/Google 使用会话)。

因此,总而言之,生成一个包含一长串随机文本的 cookie(如果您使用 SSL 等,请确保它是受域限制且安全的)。将该随机文本(或其中的哈希)连同它所属的用户 ID 一起保存在您的数据库中。每次该用户访问您的站点并且没有创建会话时,将该 cookie 的值与数据库进行比较,如果它与其中一行匹配,则将该用户登录。

希望有帮助。

于 2013-07-05T05:51:18.883 回答
0

会话状态超时属性以分钟为单位。

在 webconfig 文件中...

<system.web>
.......
<sessionState timeout="1440"></sessionState>

</system.web>

如果网络表单连续 24 小时空闲,则会话将过期。

您只能在其中拥有此 sessionstate 块

  <system.web>

有关详细信息,请参阅http://msdn2.microsoft.com/en-us/library/h6bb9cz9%28vs.80%29.aspx 。

于 2013-07-05T05:39:34.790 回答
0

是的,正如@benjamin 所说,保持低超时。真的很低。低至5分钟。这样您就不会最终占用服务器内存。要保持当前会话处于活动状态,请使用 JavascriptsetInterval每 3-4 分钟轮询一次服务器,或slidingExpiration="true"在您的 web.config 中使用。

对于重新访问用户,(如果您在实施@benjamin 的建议时发现有困难),那么另一种选择是在登录页面上设置一个“记住我”复选框。只需FormsAuthentication手动重用 cookie:

If allIsWell Then
   FormsAuthentication.SetAuthCookie(userName, isRememberMe)
End IF

isRememberMe复选框值在哪里。如果为 true,它将设置一个持久 cookie。

然后在 global.asax 中:

If HttpContext.Current.User.Identity.IsAuthenticated Then
   'Recreate user session contents here
End If
于 2013-07-05T06:08:19.207 回答