5

Web サーバーにローカルに保存されているファイルへのリンクを含むダウンロード ページがあります。ユーザーがテキスト ファイルを開くときは問題ありませんが、IE または Firefox で Office ファイルを開いて表示されるダイアログから [開く] を選択すると、ASP は新しいセッションを作成します。

私の単純化されたコントローラーの方法は次のとおりです。

<HttpGet()>
<AppAuthorize(Domain.Security.TransactionId.Download)>
Public Function Download(fileName As String) As ActionResult
    ' fileName example: C:\ProgramData\MyCompany\MyApp\SomeFile.txt
    Return New FilePathResult(fileName, "application/octet-stream")
End Function

デバッグは、ブラウザーで [開く] をクリックするとすぐに、Global.asax Session_Start() イベントがトリガーされることを示しています。

ここに画像の説明を入力

ファイルを保存してから IE で表示すると、新しいセッションは作成されません。上の図のように [開く] ボタンをクリックした場合にのみ問題になります。

これはなぜですか、どうすれば防ぐことができますか?

中心的な問題は、新しいセッションが開始され、ユーザーが有効なフォーム認証 Cookie を持っていることをアプリが確認すると、IIS が再起動されたと見なされ、ユーザーの Cookie が削除されることです。そのため、ユーザーが Word ドキュメントを開くたびに、アプリからログアウトされます。

4

2 に答える 2

2

私は自分の質問に答えています。

マットの答えが正しい方向を示した後、解決策を見つけました。次のように属性を追加して、コントローラーの SessionState を無効にしました。

<SessionState(SessionStateBehavior.Disabled)>
Public Class AttachmentController
    ...
End Class

Office はファイルをダウンロードできますが、新しいセッションを開始することはできません。私のアプリはもう壊れていません。

于 2013-10-01T13:08:39.567 に答える
2

DOC リンクが Internet Explorer でクリックされると、Word に渡されます。これは、IE ではなく Word がダウンロードを行うことを意味します。このため、新しい「ブラウザ接続」が作成され、実際にダウンロードを行うのは IE ではないため、新しいセッションが作成されます。

于 2013-09-30T21:31:46.737 に答える