我想使用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)中实现它:
Web.Config包含类似于
的内容<sessionState
cookieless="AutoDetect"
sessionIDManagerType="NyNamespace.MyCustomSessionManager, \
CustomAssemblyNameInBinFolder"
>
</sessionState>
请求由MyCustomSessionManager处理(从ISessionIDManager派生) 使用GetSessionID方法(内部使用Validate方法)
获取的ID在框架内使用(它现在不重要 - 具体如何)
...
使用Response.ApplyAppPathModifier方法 检查Session.IsCookieless属性,如果用户禁用了cookie,则修改URL。
生成的带有修改过的URL的页面将发送到浏览器
http://yourserver/folder/(session ID here)/default.aspx
我不想使用这些可怕的网址。
我知道cookieless方法有3个问题:
使用会话ID发布网址的能力(我将使用指纹识别和时间戳保护此功能)
从浏览器的不同标签连接到同一会话的能力(稍后可以解决)
有些人提到HTTP标准,并说这些标准禁止同时使用GET和POST参数。 (我对RFC有不同的理解 - 除了POST参数之外,还可以在URI中使用任何参数,因此我将同时使用这两种类型的参数)
我想做以下事情:
修改MyCustomSessionManager以从reqiest的GET参数中提取会话ID,而不是URL部分
根据数字指纹生成26个字符的ID(以便稍后验证)而不是默认的
使用Response.Filter将输出中的URL替换/修补为id-in-get-parameter,如下所示 http://www.drdobbs.com/windows/post-processing-the-output-of-aspnet-pag/212001499
此外,我想覆盖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参数。