我正尝试类似的事情:Detect when browser receives file download
我使用Chromes Developer Tools来监控我的cookie,我的问题是我在服务器端代码中设置的cookie(在我的情况下为java)只在请求中可见。不是在我查看Chrome开发工具中的“资源”选项卡时。 p>
我认为这可能与我的请求是通过构建隐藏表单并提交它(我使用ExtJS 4.2.2)提交的事实有关。
我在“资源”选项卡中看到的只是Tomcat的JSESSIONID cookie。
在请求完成后,有没有人可以帮我设置我可以用JavaScript读取的java中的cookie?
截图:
答案 0 :(得分:1)
有很多方法可以做到这一点但是有一种方法可以让你放弃cookie方法。除非你有一个需要它的用例,否则你应该出于安全原因将你的cookie设置为HttpOnly。
在某种Iframe中公开您的提交按钮,以便用户可以提交 该文件仍然保留在主页面上。
检测iFrame中何时发生单击并开始轮询 某些URL上的AJAX,例如“/ FileUploadStatus”。
在文件完成后,在服务器端上传设置会话 属性如
HttpSession session = request.getSession(false);
session.setAttribute("fileUploadStatus",true);
当AJAX请求命中/FileUploadStatus
的servlet时,检查会话变量以查看文件上载servlet是否已将fileUploadStatus
的值更改为true。如果是,则返回指示给客户端以停止轮询和更新
页面并清除服务器上的会话属性。
注意:检测iFrame中的点击是各种浏览器的毛病。您可能必须在第二次开始轮询时访问“上传页面”,然后等待。
替代解决方案:您还可以使用新的WebSocket API形成直接连接。这种方法运行速度最快,但并非所有浏览器都支持websockets。