我正在尝试解决与 MVC 4 应用程序(https://www.owasp.org/index.php/Session_fixation)中的会话固定相关的问题。
当用户进入登录页面时,清除所有会话和与会话相关的 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 时,保存在 Session["UserInfo"] 中的所有用户信息都丢失了。
我尝试创建一个新会话或更改当前会话 ID,如本博客文章中建议的那样 ( http://weblogs.asp.net/anasghanem/archive/2008/12/16/programmatically-sharing-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 中?
谢谢。