5

以前は、スーパーユーザー以外のアカウントとして(つまりポータル固有のユーザーとして)ashxに対してajax呼び出しを行おうとすると、WebサーバーがCookieを返し、認証をクリアしていました。これについて質問を投稿しましたが、答えはportalid=xxGETパラメーターで指定されていることを確認することだったようです。

portalid=xxただし、 POSTリクエストを追加すると、DotNetNukeはスーパーユーザー以外のアカウントを無視してログアウトするように見えることがわかりました。

DNN POST ajaxリクエスト中に認証を維持するにはどうすればよいですか?

4

2 に答える 2

1

私は状況全体をよく把握していると思いますが、残念ながら、唯一の真の解決策は、各子ポータルがサブ URL ではなく独自のサブドメインを持つようにすることです (例:portal.domain.comではなくdomain.com/portal)。

問題は、ポータル 0domain.comがポータル 1の場合、 ajax 経由でファイルdomain.com/portalにアクセスする必要があるまで、すべてが正しく機能することです。.ashx次に何が起こるかというと、リクエストされた URL は代わりdomain.com/DesktopModules/MyModule/Handler.ashxに であり、これには が含まれていない/portal/ため、DNN はポータル 0 でリクエストを行っていると見なし、ログアウトします。

GET リクエストはportal=1パラメーターでこれを克服できますが、これは POST リクエストでは機能しないようです。

したがって、最善の解決策は、ポータルを別個のサブドメイン ( portal.domain.com) に配置することです。そうすれば、このようなものを見逃すリスクがなくなります。

于 2012-09-13T11:54:08.340 に答える
0

問題が解決するかどうかを確認するためのいくつかの項目を見つけました。

  • ScriptManagerProxy を使用していることを確認してください。これにより、親ページも AJAX を使用しながら、ascx ページで AJAX を使用できます。
  • Page State Persistence が「Memory」に設定されている場合、DNN で AJAX を実行できないという報告が多数あります。これを経験した人は、Page State Persistence を「Page」に切り替えることで修正できました。これを行う最も簡単な方法は、次のクエリを実行することです。

    HostSettings を更新し、SettingValue='P' を設定します。ここで、SettingName='PageStatePersister'

それを実行したら、アプリケーションをリサイクルする必要があります。サーバーにアクセスできない場合は、スペースまたはキャリッジ リターンを web.config ファイルに追加するだけです (これにより、アプリが強制的にリサイクルされます)。

  • 最後に、web.config にこの行があるかどうかを確認できます。削除すると役立つ場合があります。

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

于 2012-09-11T02:24:53.877 に答える