C# 避免会话id重用asp.net

C# 避免会话id重用asp.net,c#,asp.net-mvc-4,session-timeout,sessionid,C#,Asp.net Mvc 4,Session Timeout,Sessionid,我正在使用FormsAuthentication.SetAuthCookie使用基于cookie的会话 是否有一个简单的方法,以便我可以设置过期会话id的重用,并且每次会话过期时,ASP.NET都会创建一个新的会话id 谢谢。您可以使用会话。放弃以防止会话重用 因为HTTP是无状态的,所以您无法知道用户何时关闭了浏览器。但是,您可以在每一页上都放置一个注销按钮,作为处理该按钮的一部分,call Session.About可防止第三方重复使用该按钮 除此之外,还需要HTTPS,并确保您的cooki

我正在使用FormsAuthentication.SetAuthCookie使用基于cookie的会话

是否有一个简单的方法,以便我可以设置过期会话id的重用,并且每次会话过期时,ASP.NET都会创建一个新的会话id


谢谢。

您可以使用会话。放弃以防止会话重用

因为HTTP是无状态的,所以您无法知道用户何时关闭了浏览器。但是,您可以在每一页上都放置一个注销按钮,作为处理该按钮的一部分,call Session.About可防止第三方重复使用该按钮


除此之外,还需要HTTPS,并确保您的cookie也需要HTTPS。

您必须处理两种不同的情况。第一种情况是有人单击注销按钮。第二种情况是会话本身已过期,但未发生任何用户操作

在第二个实例中,表单身份验证将自动将您发送到您在web.config中定义的登录页面

你可以做如下的事情

    [AllowAnonymous]
    public ActionResult Login()
    {
        Response.Cookies.Add(CreateExpiredBlankCookie("ASP.NET_SessionId"));
        return View();
    }

    private HttpCookie CreateExpiredBlankCookie(string name)
    {
        var cookie = new HttpCookie(name, "");
        cookie.Expires = DateTime.Now.AddDays(-1);
        return cookie;
    }

FormsAuthentication与会话无关。您可以有一个没有会话的经过身份验证的用户,也可以有一个没有经过身份验证的用户的会话。使用上述代码行设置的FormsAuthentication票证将发出一个加密cookie,其中包含登录信息,如用户名、过期时间。此行未设置的会话cookie是纯文本cookie,其中包含与服务器上的会话对应的会话Id。Am使用FormsAuthentication.SignOut;会议.放弃;在我的注销事件中。但它并没有使用相同的会话id。听起来你们应该把我的答案和@CtrlDot的答案结合起来