以前,当我尝试使用非超级用户帐户(即特定于门户的用户)作为ashx的ajax调用时,我的Web服务器会返回cookie以清除我的授权。我发表了一个关于此问题的问题,并且似乎答案是确保在我的GET参数中指定portalid=xx
。
然而,我刚刚发现如果我在POST请求中添加portalid=xx
,DotNetNuke似乎会忽略它并注销任何非超级用户帐户。
如何在DNN POST ajax请求期间保持授权?
以前,当我尝试使用非超级用户帐户(即特定于门户的用户)作为ashx的ajax调用时,我的Web服务器会返回cookie以清除我的授权。我发表了一个关于此问题的问题,并且似乎答案是确保在我的GET参数中指定portalid=xx
。
然而,我刚刚发现如果我在POST请求中添加portalid=xx
,DotNetNuke似乎会忽略它并注销任何非超级用户帐户。
如何在DNN POST ajax请求期间保持授权?
我认为我对整个情况有很好的掌握,不幸的是,唯一真正的解决方案似乎是确保每个子门户都有自己的子域名,而不是一个子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
),这样您就不会冒错过这样的风险。
我找到了一些东西供您检查,看看它们是否能解决您的问题。
有很多人报告说如果将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>