gpt4 book ai didi

Asp.Net:关闭并重新打开浏览器实例后保留旧的浏览器 session

转载 作者:行者123 更新时间:2023-12-01 10:52:08 29 4
gpt4 key购买 nike

有没有一种方法可以在用户关闭浏览器然后重新打开后保留浏览器 session 。

asp.Net 中的默认行为是将 Asp.Net SessionId 保存在浏览器 cookie 中,当我们关闭浏览器时该 cookie 过期。在重新打开时,浏览器 asp.net 会生成一个新的 SessionId,即使服务器端的旧 session 没有过期,我们也无法保留它。

我们能否控制 Asp.Net 中 session cookie过期行为

最佳答案

您不能像这样回收 session ID,但您当然可以恢复 session 状态的某些可预测部分。如果您使用的是表单例份验证,那么只需读取 global.asax session start 中的 forms-auth cookie 并重新填充 session 对象。

您可以通过使用以下方式创建持久性 cookie 来手动控制表单例份验证 cookie 的过期:

FormsAuthentication.SetAuthCookie(userName, true)

或者,您可以通过手动更改 cookie 来微调过期时间:

Dim authCookie As HttpCookie = FormsAuthentication.GetAuthCookie(userName)
Dim authTicket As FormsAuthenticationTicket = FormsAuthentication.Decrypt(authCookie.Value)
Dim newAuthTicket As New FormsAuthenticationTicket(authTicket.Version, authTicket.Name, authTicket.IssueDate, expireDate, authTicket.IsPersistent, userData)
authCookie.Value = FormsAuthentication.Encrypt(newAuthTicket)
authCookie.Expires = newAuthTicket.Expiration
HttpContext.Current.Response.Cookies.Set(authCookie)

其中 expireDate 指定 cookie 何时过期。

现在在 global.asax session start 中,您可以检查返回的用户是否仍然经过身份验证(凭借先前设置的持久性 cookie):

If HttpContext.Current.User.Identity.IsAuthenticated Then
' Here re-populate the predictable part of session state
' Like user profile etc.
End If

在操作洞察之后添加:

未使用表单例份验证,目的是能够恢复之前的 session 。

在这种情况下,唯一的选择是通过持久性 cookie 保留现有 session ,以便您以后可以检索它。有一些解决方法可以实现这一点。这位博客作者在这里解释了一种解决方法:

http://weblogs.asp.net/imranbaloch/archive/2010/06/09/persisting-session-between-different-browser-instances.aspx

这里发生的事情是我们拦截了 global.asax 中的两个事件:

  1. PostRequestHandlerExecute:(在 ASP.NET 事件处理程序完成执行时发生)在此处理程序中,我们创建一个新的 cookie(比如 temp),值为它被分配了当前 SessionId 的值。我们通过将 expires 属性设置为 session 超时来使其成为持久性 cookie。

  2. PostMapRequestHandler:(当 ASP.NET 将当前请求映射到适当的事件处理程序时发生)在此处理程序中,我们通过检查“temp”cookie。如果找到,我们将使用“temp”cookie 的值更新实际 session cookie (ASP.NET_SessionId);从而有效地恢复之前的 session 。

请注意,这只是一种解决方法。该系统旨在创建一个新 session 。我们所做的就是使用一些钩子(Hook)来解决这个问题,方法是保留一个现有 session 以便稍后检索它。所有安全隐患均成立。

关于Asp.Net:关闭并重新打开浏览器实例后保留旧的浏览器 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17808915/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com