C#MVC应用程序 - 更改会话ID,而不会丢失会话数据

我试图解决与MVC 4应用程序(https://www.owasp.org/index.php/Session_fixation)中的会话固定有关的问题。C#MVC应用程序 - 更改会话ID,而不会丢失会话数据

当用户输入登录页面时,清除所有会话和会话相关的cookie。代码:

Session.Clear(); 

Session.Abandon();

Session.RemoveAll();

if (Request.Cookies["ASP.NET_SessionId"] != null)

{

Response.Cookies["ASP.NET_SessionId"].Value = string.Empty;

Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddMonths(-20);

}

应用程序的登录页面要求输入用户的凭证和验证码。当用户点击登录按钮时,我们发送一个ajax请求。代码:

@using (Ajax.BeginForm("Autenticar", "Login", null, new AjaxOptions { OnComplete = "OnComplete", OnBegin = "OnBegin", OnSuccess = "OnSuccess", OnFailure = "OnFailure" }, new { @class = "Exception" })) 

{

<fieldset>

<legend>Login Form</legend>

all form inputs

</fieldset>

}

我们此时需要更改Session.SessionID信息,以防止会话被固定在之前。问题是在重新生成SessionID时会话[“UserInfo”]中保存的所有用户信息都会丢失。

我试图创建一个新的会话或改变当前会话ID喜欢建议在这个博客帖子(http://weblogs.asp.net/anasghanem/archive/2008/12/16/programmatically-changing-the-session-id.aspx):

 SessionIDManager Manager = new SessionIDManager(); 

string NewID = Manager.CreateSessionID(Context);

string OldID = Context.Session.SessionID;

bool redirected = false;

bool IsAdded = false;

Manager.SaveSessionID(Context, NewID,out redirected, out IsAdded);

谁能搞定我一些有用的信息保存在新的SessionID的数据?

谢谢。

回答:

答案是,您应该在执行此操作之前将任何数据保存到数据库。对于无法从数据库重新生成的任何内容,您应该确实不会使用Session,因为无论出于何种原因(或无理由),IIS都可以随时终止会话。会话只是一个临时存储机制。

以上是 C#MVC应用程序 - 更改会话ID,而不会丢失会话数据 的全部内容, 来源链接: utcz.com/qa/259751.html

回到顶部