【发布时间】:2012-07-22 09:56:35
【问题描述】:
在我们的项目中,我们有一个管理应用程序和一个客户端应用程序。 管理应用程序用于管理所有客户端。
所以当我登录到服务器应用程序时,管理员凭据保存在会话中。
之后,我在另一个浏览器中访问了客户端应用程序。它包含下载功能。下载后发生的是它清除所有会话数据。所以每次下载后我需要在管理模块中再次登录。
下载处理程序
if (context.Request["fileUrl"] != null)
{
fileUrl = context.Request["fileUrl"].ToString();
}
string filename = System.IO.Path.GetFileName(fileUrl);
context.Response.ClearContent();
context.Response.ContentType = "application/exe";
context.Response.AddHeader("content-disposition", String.Format("attachment; filename={0}", filename));
context.Response.TransmitFile(fileUrl);
context.Response.Flush();
我使用 iframe 进行下载。所以我会在点击下载按钮时设置 iframe 的来源
文件隐藏代码
iframeDownload.Attributes["src"] = "DownloadHandler.ashx?fileUrl=" + downloadUrl;
//code to be executed after download
//here i am enabling a timer control
但我找不到为什么在下载后会话被清除。 我在这个 SO 帖子中发现了一个类似的问题。 Session expires after file download
但对他来说,它只发生在 IE 中,但就我而言,它发生在所有浏览器中。
【问题讨论】:
-
这些代码行中的任何内容都不会导致您的会话被破坏。你的文件是不是太大了?导致asp.net进程被回收。
-
@nunespascal :不,它不依赖于文件..它也发生在小文件的情况下..
-
@nunespascal :下载后我有一个数据库更新,所以下载后我在同一个按钮单击中更新一个数据库值。我认为这无论如何都不会影响任何会话回收..
-
其他浏览器是否意味着,您正试图从不同浏览器或不同机器的新实例访问它?还有你使用的是什么会话存储?
-
@Ramesh:我正在访问 Firefox 中的管理端和 chrome 中的客户端。会话存储在应用程序本身,我的意思是没有指定任何特殊的会话模式,所以它必须是 InProc..
标签: c# asp.net session download httphandler