Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 修改会话Id时会发生什么情况?_C#_Asp.net_.net_Session_Cookies - Fatal编程技术网

C# 修改会话Id时会发生什么情况?

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是无

我正在探索Cookie和会话[我在ASP.NET C#microsoft framework中使用它们]

了解了会话和cookies的工作原理和功能

我的看法是

  • 一旦用户登录并建立会话,他或她将获得会话id以进一步跟踪他们

  • 此外,此
    sessionId
    可以存储在服务器上,如SQL Server或InProc,这意味着它存储在发布服务器或缓存Redis cache上

  • 我的问题是

    我可以理解,
    sessionId
    存储在内存中,并作为httpheader随每个请求一起发送(因为HttpSessions是无状态的)

  • 当我们谈论在内存中存储会话时,我们谈论的是哪个内存
  • 如果我们将它们存储在cookie中,那么如果我去修改cookie呢
  • 如果我可以修改它们,如果我更改
    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中的sessionId查找此数据 2/3。修改sessionId称为,并允许您“成为”该用户。这通常被跨站点脚本(XSS)等攻击利用

    为防止劫持,请确保:

    • cookie是加密的。ASP.NET有很多方法可以为您做到这一点,但这种方法不能被篡改
    • cookie设置为HttpOnly。这确保了cookie只能通过http请求发送,而javascript之类的东西——以及XSS攻击——无法访问cookie
    • 如果您使用的是类似ASP.NET会话状态的内容,请更改cookie的默认名称,使其不易识别

    1是2/3的复制品-不确定你在问什么-如果你修改cookie,它将不同。。。那么,您能否澄清在这种情况下哪些内容不清楚?如果我修改包含
    sessionId
    的cookie并提供一个新的
    sessionId
    ,您尝试时会发生什么?一旦用户登录并建立会话,更改cookie值就变得微不足道了——登录与会话状态或会话id完全无关,因为身份验证和会话状态是两件独立的事情。通常最好(如果可能)使用身份验证而不使用会话状态,如中所述。“如果您禁用用于会话跟踪的Cookie,asp.net framework将在默认情况下将其附加到URL中。”-真的吗?服务器无法知道是否禁用了Cookie。。。而且没有自动回退到在url中存储会话id不安全…“如果更改cookie值,服务器将无法识别请求。”-服务器确实能够识别请求。。。将cookie设置为任何值。如果您将其更改为有效id,将创建新会话(或者您偷偷进入其他会话),这与我提到的“会话劫持”相同@AlexeiLevenkov,我已经更新并更清楚地说明了这一点。@nowHewomustnotbenamed。不,会话状态存储在服务器内存中,而不是浏览器上。我找不到进行向下投票的任何原因。我正在投票,因为我发现它有一些内容。
    public string SessionID { get; }