如何在无cookie模式下将会话ID放入HTTP请求的GET参数而不是URL?

时间:2015-07-16 16:23:00

标签: c# asp.net asp.net-mvc session httpresponse

我想使用phpbb使用的方法 (将其作为HTTP请求的GET参数传递的PHP会话ID, 喜欢http(s):// server / page.php?sid = somestring )。 PHP生成长度为26个字符的id ASP.NET生成一个长度为24个字符的

ASP .NET改变/重写URL,而不是我想要避免的

如何在ASP .NET(https://msdn.microsoft.com/en-us/library/aa479314.aspx)中实现它:

  1. Web.Config包含类似于

    的内容
    <sessionState 
     cookieless="AutoDetect"
     sessionIDManagerType="NyNamespace.MyCustomSessionManager, \
       CustomAssemblyNameInBinFolder"
    >
    </sessionState>
    
  2. 请求由MyCustomSessionManager处理(从ISessionIDManager派生) 使用GetSessionID方法(内部使用Validate方法)

  3. 获取的ID在框架内使用(它现在不重要 - 具体如何)

  4. ...

      渲染代码中的
    1. 使用Response.ApplyAppPathModifier方法 检查Session.IsCookieless属性,如果用户禁用了cookie,则修改URL。

    2. 生成的带有修改过的URL的页面将发送到浏览器

      http://yourserver/folder/(session ID here)/default.aspx
      
    3. 我不想使用这些可怕的网址。

      我知道cookieless方法有3个问题:

      • 使用会话ID发布网址的能力(我将使用指纹识别和时间戳保护此功能)

      • 从浏览器的不同标签连接到同一会话的能力(稍后可以解决)

      • 有些人提到HTTP标准,并说这些标准禁止同时使用GET和POST参数。 (我对RFC有不同的理解 - 除了POST参数之外,还可以在URI中使用任何参数,因此我将同时使用这两种类型的参数)

      我想做以下事情:

      1. 修改MyCustomSessionManager以从reqiest的GET参数中提取会话ID,而不是URL部分

      2. 根据数字指纹生成26个字符的ID(以便稍后验证)而不是默认的

      3. 使用Response.Filter将输出中的URL替换/修补为id-in-get-parameter,如下所示 http://www.drdobbs.com/windows/post-processing-the-output-of-aspnet-pag/212001499

      4. 此外,我想覆盖HttpResponse上的ApplyAppPathModifier(密封, 但是有HttpResponseWrapper类)。
        但我不知道何时更换对响应包装的响应。

        这是可行的方法吗?

        有几个类似的问题:
        Cookieless session from URL to QueryString
        Use Session ID from supplied parameter instead of default behavior in ASP.NET MVC3
        还有一些我再也找不到了

        我问我的,因为我不完全清楚, 如何实现会话ID写入HTTP请求的GET参数。

0 个答案:

没有答案