如果用户登录或不登录,我们是否只能存储在会话中并删除.ASPXAUTH?
答案 0 :(得分:24)
ASP.Net_SessionId
是一个Cookie,用于标识服务器上的用户session。会话是服务器上的一个区域,可用于在http请求之间存储数据。
例如,控制器操作可以执行:
Session["FirstName"] = model.FirstName;
然后,在后续操作中,可以从会话中检索第一个名称:
var firstName = Session["FirstName"];
ASP.Net_SessionId标识该用户请求的会话。不同的用户将提交不同的Cookie,因此Session["FirstName"]
将为该不同的用户保留不同的值。
ASPXAUTH
是一个Cookie,用于标识用户是否为authenticated(即已验证其身份)。例如,控制器操作可以确定用户是否提供了正确的登录凭据,如果是,则发出身份验证cookie using:
FormsAuthentication.SetAuthCookie(username, false);
稍后您可以使用[Authorize]属性检查用户是否有权执行操作,该属性会检查是否存在ASPXAUTH
Cookie。
总而言之,cookie有两种不同的用途。一个用于确定用户会话状态,另一个用于确定用户是否已通过身份验证。
要完成你的问题的答案,是的,你可以摆脱ASPXAUTH
cookie并只使用session来识别用户(我已经在旧的经典asp应用程序中看到过这种情况)但我不会#39 ;推荐它。更清楚地分离关注点并在必要时使用适当的方法。会话和身份验证将设置自己的超时值。通过使用会话进行身份验证,您将只有一次超时。我不确定在使用会话进行身份验证时是否存在任何安全隐患,但我仍然会将它们分开。
答案 1 :(得分:5)
.NET发布了一个完全不同的cookie,名为ASP.NET_SessionId,用于跟踪会话状态。
ASPXAUTH cookie用于确定用户是否经过身份验证。
所以这些是两个不同的概念,即使用表单身份验证的会话状态管理和身份验证管理。
如果您使用会话进行身份验证并忘记表格身份验证,您将摆脱.ASPXAUTH
答案 2 :(得分:1)
两者都是必需的,使用导致以下漏洞:
*单独的ASP.NET_SessionId:会话修复
*表单身份验证Cookie单独:无法在服务器上终止身份验证令牌
此外,您需要确保它们正确耦合在一起。否则,配置也会带来风险:
*松散耦合的ASP.NET_SessionID和表单身份验证Cookie:仍然易受攻击
REF: http://blog.securityps.com/2013/06/session-fixation-forms-authentication.html
答案 3 :(得分:-1)
会话状态和身份验证彼此无关。你可以使用一个而不用另一个。