以前,当我尝试以非超级用户帐户(即作为特定于门户的用户)对 ashx 进行 ajax 调用时,我的 Web 服务器将返回 cookie 以清除我的授权。我发布了一个关于此的问题,似乎答案是确保portalid=xx
在我的 GET 参数中指定了 。
但是,我刚刚发现,如果我添加portalid=xx
POST 请求,DotNetNuke 似乎会忽略并注销任何非超级用户帐户。
如何在 DNN POST ajax 请求期间保持授权?
以前,当我尝试以非超级用户帐户(即作为特定于门户的用户)对 ashx 进行 ajax 调用时,我的 Web 服务器将返回 cookie 以清除我的授权。我发布了一个关于此的问题,似乎答案是确保portalid=xx
在我的 GET 参数中指定了 。
但是,我刚刚发现,如果我添加portalid=xx
POST 请求,DotNetNuke 似乎会忽略并注销任何非超级用户帐户。
如何在 DNN POST ajax 请求期间保持授权?
我认为我对整个情况都有很好的处理,不幸的是,唯一真正的解决方案似乎是确保每个子门户都有自己的子域而不是子 URL(例如portal.domain.com
,而不是domain.com/portal
)。
问题是,当您的门户 0 是domain.com
门户 1时,domain.com/portal
一切正常,直到您需要.ashx
通过 ajax 访问文件。然后发生的情况是请求的 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”来修复它。最简单的方法是运行这个查询:
更新 HostSettings 设置 SettingValue='P' where SettingName='PageStatePersister'
运行后,您需要回收应用程序。如果您无权访问服务器,只需在 web.config 文件中添加空格或回车(这将强制应用程序回收)。
最后,您可能会查看您的 web.config 中是否有此行。有时删除它会有所帮助:
<system.web> <xhtmlConformance mode="Legacy" /> </system.web>