我正在尝试类似的东西:Detect when browser receives file download
我正在使用 Chrome 开发人员工具来监视我的 cookie,我的问题是我在服务器端代码(在我的例子中是 java)中设置的 cookie 仅在请求中可见。当我检查 Chrome 开发工具中的“资源”选项卡时,情况并非如此。
我认为这可能与我的请求是通过构造一个隐藏表单并提交它来提交的(我使用的是 ExtJS 4.2.2)有关。
我在“资源”选项卡中只能看到来自 Tomcat 的 JSESSIONID cookie。
谁能帮我从 java 设置 cookie,以便在请求完成后我可以在 JavaScript 中读取这些 cookie?
截图:
最佳答案
有很多方法可以做到这一点,但这里有一种可以让您放弃 cookie 方法。出于安全原因,您确实应该将 cookie 设置为 HttpOnly,除非您有需要它的用例。
在某种 Iframe 中公开您的提交按钮,以便用户可以提交 文件仍保留在主页上。
检测 iFrame 中何时发生点击并开始轮询 AJAX 在某些 URL,例如“/FileUploadStatus”。
文件上传完成后在服务器端设置一个 session 属性如
HttpSession session = request.getSession(false); session.setAttribute("fileUploadStatus",true);
当 AJAX 请求到达
/FileUploadStatus
处的 servlet 时,检查 session 变量以查看文件上传 servlet 是否已将fileUploadStatus
的值更改为 true。如果是这样,则向客户端返回停止轮询和更新的指示 页面并清除服务器上的 session 属性。
注意:在各种浏览器中检测 iFrame 中的点击是一件很麻烦的事情。您可能必须在他们访问您的“上传页面”时开始轮询,然后等待。
替代解决方案:您还可以使用新的 WebSocket API 建立直接连接。这种方法运行速度最快,但并非所有浏览器都支持 websocket。
关于java - 在java中设置cookie,在javascript中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26094183/