在 Forms-Authentication 中动态使用 cookie
Posted
技术标签:
【中文标题】在 Forms-Authentication 中动态使用 cookie【英文标题】:Dynamic use of cookies in Forms-Authentication 【发布时间】:2016-08-27 05:21:46 【问题描述】:目前我有两种方法:
当我设置我的 web.config cookieless="UseCookies"
我的网址看起来:
http://example.com/Stuff
<sessionState timeout="60" cookieless="UseCookies"/>
当我设置cookieless="true"
我有这样的网址
http://example.com/%28S%28uanyuxwgaviyonky0lxwq3vq%29%29/Stuff
<sessionState timeout="60" cookieless="true"/>
我可以设置cookieless
属性动态吗?像
if(/*condition*/)
sessionState .cookieless = "true";
else
sessionState .cookieless = "UseCookies";
这必须在 Global.asax 的 SessionStart
中的某个地方或其他地方
【问题讨论】:
动态是指每个请求还是仅在代码中,但仍然是全局的,每个应用程序? @Evk 我想在每个会话中处理它 - 我有一个包含多个“起始页”的网站,我想根据首先调用哪个页面来决定它 你想为 FormsAuthentication cookie 设置这个? 在某些情况下我根本无法设置 cookie - 这就是我需要的无 cookie 会话 根据here 的讨论,以及从其他资源中动态设置 CookieLess 或 UseCookies 是不可能的。但是,您可以使用 AutoDetect 来了解浏览器对 cookie 的支持。希望这可以帮助。谢谢。 【参考方案1】:这里的基本思想是你想在运行时修改WebConfig
文件。我没有尝试过自己,但出于好奇,我在互联网上搜索,发现This link
根据这个,您在Global.asax
中的代码将类似于
注意:这实际上将新值写入 web.config
void Application_Start(object sender, EventArgs e)
// Code that runs on application startup
Configuration config;
config = WebConfigurationManager.OpenWebConfiguration("~");
SessionStateSection SessionState = config.GetSection("system.web/sessionState") as SessionStateSection;
if (SessionState != null)
SessionState.Mode = System.Web.SessionState.SessionStateMode.InProc;// changes
if (true/*condition*/)
SessionState.Cookieless = System.Web.HttpCookieMode.UseCookies;
else
SessionState.Cookieless = System.Web.HttpCookieMode.UseUri; // not sure about this one
config.Save();
【讨论】:
【参考方案2】:自 2003 年以来定期讨论此问题(例如,请参阅 Switch dynamically to cookieless session state asp.net?。 您无法从应用程序更改无 cookie 的 false/true,因为 IIS 在 begin_request 触发之前做出决定。 一些可用的选项是: A.
<system.web>
<sessionState cookieless="AutoDetect"></sessionState>
</system.web>
B.
在你的 webroot 中设置一些文件夹作为 web 应用程序并设置 cookieless="true"
【讨论】:
我知道这不是您想要的答案,但这是您必须接受的。随它去吧。【参考方案3】:IIS 在应用程序请求启动之前对其进行管理,因此您无法在应用程序级别对其进行更改。
【讨论】:
以上是关于在 Forms-Authentication 中动态使用 cookie的主要内容,如果未能解决你的问题,请参考以下文章