2014-09-29 77 views
1

我想類似這樣的東西閱讀:Detect when browser receives file download設置cookie的在Java中,在javascript

我用鉻合金開發工具來監視我的餅乾,我的問題是餅乾我在服務器端代碼中設置(在我的情況下是java)只在請求中可見。不是當我查看Chrome開發工具中的資源標籤時。

我認爲這可能與我的請求通過構建隱藏表單並提交(我使用ExtJS 4.2.2)提交的事實有關。

我可以在我的資源選項卡中看到的是來自Tomcat的JSESSIONID cookie。

任何人都可以幫我設置cookie,我可以在請求完成後用JavaScript讀取cookie嗎?

截圖:

enter image description here

enter image description here

+0

那麼你是僅僅根據工具提供給你的數據,還是實際上嘗試在請求完成後使用Javascript讀取cookie並且cookie不存在?你做了服務器生成的響應轉儲嗎?那裏有什麼? – Gimby 2014-09-29 07:27:29

+0

是的,我嘗試閱讀cookie和document.cookie只返回JSESSIONID cookie。 – CJe 2014-09-29 07:46:13

+0

這留下了「檢查服務器的響應」部分問題。 – Gimby 2014-09-29 10:54:49

回答

1

有很多方法可以做到這一點,但一個繼承人,它會讓你放棄該cookie的方法。除非您有一個需要它的用例,否則出於安全原因,您應該將Cookie設置爲HttpOnly。

  1. 暴露你在某種iframe的提交按鈕,以便用戶可以提交 文件而主網頁上仍然保留。

  2. 檢測到iFrame中發生點擊並通過 AJAX在某些URL(例如「/ FileUploadStatus」)中進行輪詢。

  3. 在服務器端文件一旦完成上傳設置會話 屬性如

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

  4. 當AJAX請求到達這個servlet在/FileUploadStatus,檢查會話變量,看是否文件上傳servlet已將fileUploadStatus的值更改爲true。如果是,則向客戶端返回指示以停止輪詢並更新 頁面並清除服務器上的會話屬性。

注:檢測的iframe中點擊是跨不同的瀏覽器有毛的東西。您可能不得不開始輪詢第二次訪問您的「上傳頁面」,然後等待。

備用解決方案:您也可以使用新的WebSocket API形成直接連接。這種方法運行速度最快,但並非所有瀏覽器都支持websocket。

+0

感謝您的評論@Usman。不幸的是,由於使用相同代碼的其他解決方案,我的創作能力有限。我會試着製作一個樣本解決方案,看看你的建議對我有多遠。謝謝! – CJe 2014-09-30 07:06:04