【问题标题】:Session getting cleared after file download using handler使用处理程序下载文件后会话被清除
【发布时间】: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


【解决方案1】:

实际上在我的代码中成功下载后我们需要从我的应用程序中删除一个文件夹。这会导致 App_domain 重新启动。

参考:所以发帖Delete Directory from ASP.NET application returns to new session。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多