C# 修改会话Id时会发生什么情况?
我正在探索Cookie和会话[我在ASP.NET C#microsoft framework中使用它们] 了解了会话和cookies的工作原理和功能 我的看法是C# 修改会话Id时会发生什么情况?,c#,asp.net,.net,session,cookies,C#,Asp.net,.net,Session,Cookies,我正在探索Cookie和会话[我在ASP.NET C#microsoft framework中使用它们] 了解了会话和cookies的工作原理和功能 我的看法是 一旦用户登录并建立会话,他或她将获得会话id以进一步跟踪他们 此外,此sessionId可以存储在服务器上,如SQL Server或InProc,这意味着它存储在发布服务器或缓存Redis cache上 我的问题是 我可以理解,sessionId存储在内存中,并作为httpheader随每个请求一起发送(因为HttpSessions是无
sessionId
可以存储在服务器上,如SQL Server或InProc,这意味着它存储在发布服务器或缓存Redis cache上sessionId
存储在内存中,并作为httpheader随每个请求一起发送(因为HttpSessions是无状态的)
sessionId
并提供一个新的sessionId
,该怎么办1。当我们谈论在内存中存储会话时,我们谈论的是哪个内存? Ans:InProc模式,将会话状态存储在Web服务器(RAM)的内存中。这是默认设置 2。如果我们将它们存储在cookie中,如果我去修改cookie呢?
Ans:只有会话id存储在cookie中。如果您不想使用Cookie进行会话跟踪,asp.net framework还通过在URL中添加Cookie来提供支持。如果更改cookie值,服务器将无法使用存储的会话数据识别请求。您需要了解http是一种无状态协议,sessionid是往返过程中请求的浏览器标识符。如果更改cookie值,服务器将无法识别该请求 幸运的是,如果您提供了有效的sessionid,服务器将根据该id提供会话中存储的内容。这称为会话劫持 3。如果我可以修改它们,那么如果我更改sessionId并提供一个新的sessionId呢? 答:如果您正在使用System.Web.SessionState的SessionId。无法更改,因为它是只读的。但您可以在客户端自由更改任何内容(Cookie或URL) 名称空间:System.Web.SessionState 程序集:System.Web(在System.Web.dll中)
- cookie是加密的。ASP.NET有很多方法可以为您做到这一点,但这种方法不能被篡改
- cookie设置为HttpOnly。这确保了cookie只能通过http请求发送,而javascript之类的东西——以及XSS攻击——无法访问cookie
- 如果您使用的是类似ASP.NET会话状态的内容,请更改cookie的默认名称,使其不易识别
sessionId
的cookie并提供一个新的sessionId
,您尝试时会发生什么?一旦用户登录并建立会话,更改cookie值就变得微不足道了——登录与会话状态或会话id完全无关,因为身份验证和会话状态是两件独立的事情。通常最好(如果可能)使用身份验证而不使用会话状态,如中所述。“如果您禁用用于会话跟踪的Cookie,asp.net framework将在默认情况下将其附加到URL中。”-真的吗?服务器无法知道是否禁用了Cookie。。。而且没有自动回退到在url中存储会话id不安全…“如果更改cookie值,服务器将无法识别请求。”-服务器确实能够识别请求。。。将cookie设置为任何值。如果您将其更改为有效id,将创建新会话(或者您偷偷进入其他会话),这与我提到的“会话劫持”相同@AlexeiLevenkov,我已经更新并更清楚地说明了这一点。@nowHewomustnotbenamed。不,会话状态存储在服务器内存中,而不是浏览器上。我找不到进行向下投票的任何原因。我正在投票,因为我发现它有一些内容。
public string SessionID { get; }