【问题标题】:Why does DotNetNuke log me out on post ajax requests?为什么 DotNetNuke 在发布 ajax 请求时让我退出?
【发布时间】:2012-08-31 13:46:57
【问题描述】:

以前,当我尝试以非超级用户帐户(即作为特定于门户的用户)对 ashx 进行 ajax 调用时,我的 Web 服务器将返回 cookie 以清除我的授权。我posted a question about this,似乎答案是确保在我的 GET 参数中指定了portalid=xx

但是,我刚刚发现,如果我在 POST 请求中添加 portalid=xx,DotNetNuke 似乎会忽略并注销任何非超级用户帐户。

如何在 DNN POST ajax 请求期间保持授权?

【问题讨论】:

    标签: c# dotnetnuke


    【解决方案1】:

    我认为我对整个情况有很好的把握,不幸的是,唯一真正的解决方案似乎是确保每个子门户都有自己的子域而不是子 URL(例如 portal.domain.com 而不是 @987654322 @)。

    问题是,当您的门户 0 是 domain.com 而门户 1 是 domain.com/portal 时,一切正常,直到您需要通过 ajax 访问 .ashx 文件。然后发生的情况是请求的 URL 改为 domain.com/DesktopModules/MyModule/Handler.ashx,其中不包含 /portal/,从而导致 DNN 认为您正在门户 0 上执行请求并将您注销。

    虽然 GET 请求可以通过 portal=1 参数克服这个问题,但这似乎不适用于 POST 请求。

    因此,似乎最好的解决方案是让您的门户位于不同的子域 (portal.domain.com),这样您就不会冒险错过这样的东西。

    【讨论】:

    • 这个答案很可能在问题所在的正确区域。任何注销通常是由 Url 中的门户引用不明确引起的,这会导致请求错误地识别请求所属的门户。准确了解注销发生的时间也很重要。有时它是进入页面视图的整个请求组中的一个获取,但看起来您在 POST 上已注销 - 实际上您已经注销,接下来发生什么请求并不重要,它总是会导致未经身份验证的响应。
    【解决方案2】:

    我找到了一些东西供您检查,看看它们是否能解决您的问题。

    • 确保您使用的是 ScriptManagerProxy。这允许 ascx 页面使用 AJAX,而父页面也使用 AJAX。
    • 有很多报告称如果页面状态持久性设置为“内存”,则人们无法使用 DNN 运行 AJAX。遇到这种情况的人可以通过将 Page State Persistence 切换为“Page”来修复它。最简单的方法是运行这个查询:

      更新主机设置 设置设置值='P' 其中 SettingName='PageStatePersister'

    运行后,您需要回收应用程序。如果您无权访问服务器,只需在您的 web.config 文件中添加一个空格或回车(这将强制应用程序回收)。

    • 最后,您可能会查看您的 web.config 中是否有此行。有时删除它会有所帮助:

    【讨论】:

    • 您有机会了解这些可能的解决方案吗?
    • 很抱歉直到今天才试一试。不幸的是,这些都不起作用。我可能还应该声明我没有使用 ASP.NET Ajax 而是使用 jquery 来执行我的帖子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    相关资源
    最近更新 更多