我正在开发的搜索应用程序允许用户选择结果,并以EXCEL、XML等不同格式导出。
所选结果的唯一id使用JavaScript存储在cookie中,以便稍后可以发布这些信息以导出搜索结果。
问题是,当cookie的内容变得相当大时,Web应用程序防火墙会阻止请求。经过分析,我发现所有cookie内容都成为请求头的一部分,使其超过了防火墙允许的大小。
这种行为对所有cookie都一样吗?在这种情况下,建议如何解决?
技术是在IIS 7.5服务器上的ASP.NET 4.0。
是的,当URL与cookie的路径匹配时,cookie将包含在向服务器发出的每个请求中。
考虑到用户可以选择以后要导出的任意项目,您需要将这些项目的ID存储在某个位置。
将它们以明文形式存储在cookie中,显然会导致防火墙出现问题。避免这种情况的一个选项是压缩ID。例如,如果ID是123456
、123459
、123463
,那么您实际上只需要存储123456;3.4(最低数字和增量),但这种形式可能很难处理,只会在某些情况下受益。
另一种选择是使用例如gzip格式压缩cookie数据。但是,如果使用JavaScript编写cookie,这可能并不简单(尽管您可能只将当前页面上的项目写成纯文本,并在用户在页面之间移动时让服务器压缩它们)。
如果cookie中的数据量仍然过大,您可以查看服务器端状态,例如使用数据库。具有ExportId
和ItermId
列的表,您可以根据用户的操作在其中添加或删除行,并且只需要在URL或cookie中发送ExportId
。