在 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的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 之 animate 的可用属性

继承和动态规划的危险

在同一个 JVM 上设置多个信任库

int a和(int &)a的区别(转)

ue4怎么取消自动生成小白人

HTML5培训教程学习之动效制作