2014-03-29 40 views
0

我有一个报告和统计应用程序,以基本表格格式显示各种查询结果。在报告结果页面的底部是用户将他们正在查看的报告结果下载到CSV文件的选项。与在线银行类似的功能,您可以查看您的银行交易,然后可选择将交易历史记录下载到csv。PHP:从会话变量下载文件

这样做的最佳实践方法是什么?

a。一个下载按钮,用于触发报表查询重新运行并随后传输到csv下载文件。

b。当查询首次运行并在视图中呈现时,控制器将报告对象保存在会话变量中。下载按钮因此下载到来自会话变量的报告对象,而不必重新运行查询。

我在选项B中看到的好处是双重的。 1.报表查询不必重新运行,从而减轻数据库的负担。 2.从会话变量下载的报告与报告结果中显示的报告完全匹配。对于选项a,如果在查看报告的时间与触发下载链接的时间之间有数据更新,则下载的报告可能与正在查看的报告有所不同。

如果使用会话变量方法,我应该考虑是否存在任何风险或缺陷?

在此先感谢您的任何意见或指导。

回答

0

你总结的问题被认为很好。最后,这是一个你必须做出的折衷。但是,请注意,您不能将资源(如MySQL结果)存储在$_SESSION(我不确定您引用的“报告对象”是自写报告类的实际对象,还是您引用的是从数据库)。我个人更喜欢选项B,因为它保证不会提供与应用程序中可见的结果不同的结果。

+0

感谢您的输入。是的,要存储在会话变量中的对象是格式化为下载到csv的报告输出的自定义报告类。我唯一担心的可能是安全或服务器内存负载问题,将对象存储在内存中,或者根据请求将它们简单地传输到浏览器。 – mass6