为什么DotNetNuke会在发布ajax请求时将我注销?

时间:2012-08-31 13:46:58

标签: c# dotnetnuke

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

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

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

2 个答案:

答案 0 :(得分: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)上,然后您不会冒这样的风险。

答案 1 :(得分:0)

我找到了一些东西供你查看,看看是否有任何一个可以解决你的问题。

  • 确保您使用的是ScriptManagerProxy。这允许ascx页面使用AJAX,而父页面也使用AJAX。
  • 如果页面状态持久性设置为“内存”,则有很多人报告无法使用DNN运行AJAX。那些经历过这种情况的人已经能够通过将页面状态持久性切换为“页面”来解决它。最简单的方法是运行此查询:

    更新HostSettings 设置SettingValue ='P' 其中SettingName ='PageStatePersister'

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

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

    <&的System.Web GT; < xhtmlConformance mode =“Legacy”/> < /system.web>