【问题标题】:Set cookie in java, read in javascript在java中设置cookie,在javascript中读取
【发布时间】:2014-09-30 12:33:54
【问题描述】:

我正在尝试类似的东西:Detect when browser receives file download

我正在使用 Chrome 开发者工具来监控我的 cookie,我的问题是我在服务器端代码(在我的例子中是 java)中设置的 cookie 仅在请求中可见。当我检查 Chrome 开发工具中的资源选项卡时不会。

我认为这可能与我的请求是通过构造隐藏表单并提交(我使用的是 ExtJS 4.2.2)来提交的事实有关。

我在“资源”选项卡中只能看到来自 Tomcat 的 JSESSIONID cookie。

谁能帮我从 java 设置 cookie,以便在请求完成后我可以在 JavaScript 中读取?

截图:

【问题讨论】:

  • 那么您是仅基于工具提供给您的数据,还是实际上在请求完成并且 cookie 不存在后尝试使用 Javascript 读取 cookie?您是否对服务器生成的响应进行了转储?里面有什么?
  • 是的,我尝试读取 cookie 并且 document.cookie 只返回 JSESSIONID cookie。
  • 这就留下了我的问题中的“检查来自服务器的响应”部分。
  • 不太清楚你的意思@Gimby。请参阅更新问题中的屏幕截图。为什么我使用 document.cookie 看不到 downloadCookie006?

标签: java javascript cookies


【解决方案1】:

有很多方法可以做到这一点,但这里有一种方法可以让您放弃 cookie 方法。出于安全原因,您确实应该将 cookie 设置为 HttpOnly,除非您有需要它的用例。

  1. 在某种 iframe 中公开您的提交按钮,以便用户可以提交 该文件仍保留在主页上。

  2. 检测 iFrame 中何时发生单击并开始轮询 某些 URL 上的 AJAX,例如“/FileUploadStatus”。

  3. 文件上传完成后,在服务器端设置会话

    等属性

    HttpSession session = request.getSession(false); session.setAttribute("fileUploadStatus",true);

  4. 当 AJAX 请求到达 /FileUploadStatus 的 servlet 时,检查会话变量以查看文件上传 servlet 是否已将 fileUploadStatus 的值更改为 true。如果是,则向客户端返回指示以停止轮询和更新 页面并清除服务器上的会话属性。

注意:检测 iFrame 中的点击是跨各种浏览器的棘手问题。您可能必须在他们访问您的“上传页面”的那一刻开始投票,然后等待。

替代解决方案:您还可以使用新的 WebSocket API 形成直接连接。这种方法运行速度最快,但并非所有浏览器都支持 websockets。

【讨论】:

  • 感谢您的评论@Usman。不幸的是,由于使用相同代码的其他解决方案,我的创造力受到限制。我将尝试制作一个示例解决方案,看看您的建议对我有多大帮助。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多