我有一個基於J2EE/JSF的網絡應用程序。 它由一個表單輸入,文本顯示和通過Google Visualization API通過自定義servlet數據源呈現的可視化文件組成。如何讓Safari使用cookie存儲的會話ID?
頁面呈現在<iframe/>
的頁面中,我最多可以控制一部分。
在Chrome,Firefox上,該應用程序運行良好。他們接受JSF生成的會話cookie並將會話ID返回給每個請求的服務器。 在IE上,我們不得不小心操作一下,但總而言之,它的工作原理也是如此。
但是,在Safari(5.1.2/Windows XP)上,會話標識作爲非標準URL參數(;jsessionid=...
)發送。因此,對servlet數據源的查詢不包括會話標識,並且會爲每個對數據源的請求創建一個新的會話。
這會導致可視化卡在初始狀態。
我懷疑在瀏覽器的不同JavaScript引擎的原因,但懷疑是沒有多大用處。
我能以某種方式讓Safari將會話ID添加到所有請求嗎?更妙的是,我可以讓它以某種方式爲所有請求使用cookie嗎?
更新:我試圖追加會話ID到谷歌的「查詢」對象執行的調用,但失敗。 當這樣調用
new google.visualization.Query('chartdata?randomBitToBypassCaching='+random+";jsessionid="+jsessionid);
請求的URL是
http://localhost:8083/myapp/chartdata?randomBitToBypassCaching=1327312516149;jsessionid=9fdb20a75d30f000c063317997b5&tqx=reqId%3A0
注意查詢追加tqx
-parameter的URL,這使得我嘗試轉移ID沒有實際意義。
更新2:在URL中傳輸jsessionid的推薦方法是在參數之前添加它。