为什么DotNetNuke在post ajax请求后会将我注销?

5

以前,当我尝试使用非超级用户帐户(即特定于门户的用户)作为ashx的ajax调用时,我的Web服务器会返回cookie以清除我的授权。我发表了一个关于此问题的问题,并且似乎答案是确保在我的GET参数中指定portalid=xx

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

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

2个回答

1

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

问题在于,当您的门户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中存在模糊的门户引用,导致请求错误地识别了请求所属的门户。同时,了解注销发生的确切时间也很重要。有时它是在进入页面视图的请求总组中的一个get请求,但看起来你在POST请求时已经注销了,而且无论下一个请求是什么,它都将始终导致非身份验证响应。 - Bruce Chapman

0

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

  • 确保您正在使用ScriptManagerProxy。这允许ascx页面在父页面也使用AJAX时使用AJAX。
  • 有很多人报告说如果将Page State Persistence设置为“Memory”,则无法在DNN中运行AJAX。那些遇到此问题的人已经通过将Page State Persistence切换为“Page”来解决它。最简单的方法是运行此查询:

    update HostSettings set SettingValue='P' where SettingName='PageStatePersister'

运行完毕后,您需要重新启动应用程序。如果您无法访问服务器,只需向web.config文件添加一个空格或回车符(这将强制应用程序重新启动)。

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

    <system.web> <xhtmlConformance mode="Legacy" /> </system.web>


你有没有机会看过这些可能的解决方案? - Joshua
抱歉直到今天才能尝试。不幸的是,这些都不起作用。我可能还应该说明一下,我没有使用ASP.NET Ajax,而是使用jQuery来执行我的帖子。 - KallDrexx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接