我有一个使用表单身份验证和成员资格的网站。用户必须启用cookie才能使用该站点。我被要求更改代码,以便在用户登录时更改会话ID。显然,这将防止会话修复攻击(http://en.wikipedia.org/wiki/Session_fixation)。有谁知道如何在不丢失整个会话的情况下更改会话ID? PHP有一个特定的方法来执行此操作,但我找不到.NET等价物。
我有一个使用表单身份验证和成员资格的网站。用户必须启用cookie才能使用该站点。我被要求更改代码,以便在用户登录时更改会话ID。显然,这将防止会话修复攻击(http://en.wikipedia.org/wiki/Session_fixation)。有谁知道如何在不丢失整个会话的情况下更改会话ID? PHP有一个特定的方法来执行此操作,但我找不到.NET等价物。
这是一篇博文 谈到这个:
ASP.NET不直接支持 重新生成会话的功能 ID。请参阅有关的文档 问题 这里。有一个 不那么 快速而肮脏的方式 做到这一点 设置
ASPNET_SessionID价值 空字符串并重定向 该值被重新生成。
这是一篇博文 谈到这个:
ASP.NET不直接支持 重新生成会话的功能 ID。请参阅有关的文档 问题 这里。有一个 不那么 快速而肮脏的方式 做到这一点 设置
ASPNET_SessionID价值 空字符串并重定向 该值被重新生成。
我在回答了类似的问题 在当前HTTPContext中生成新的ASP.NET会话。基本上我们必须更改一些SessionStateModule内部状态,以便能够重新生成会话ID而不会丢失Session中的对象。我使用反射将_rqId字段设置为新ID,将_rqSessionStateNotFound设置为true。缺点是我们必须向应用程序授予“完全信任”。
这是一个非常古老的问题,我正在复活,但这是解决方案:
var manager = new SessionIDManager();
bool redirected, isAdded;
manager.SaveSessionID(System.Web.HttpContext.Current,
"5vonjb4mtb1of2fxvhjvkh5d", out redirected, out isAdded);
// sessionId now equals "5vonjb4mtb1of2fxvhjvkh5d"
var sessionId = Session.SessionID;