2012-01-20 35 views
0

我有一個基於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的推薦方法是在參數之前添加它。

回答

0

最後,我傳遞的會話ID作爲URL參數,並使用標準符號;jsessionid=...?...

不幸的是,剛剛追加會話ID查詢字符串實施了重定向請求一個Servlet過濾器 - 前任何其他參數 - 沒有工作:

new google.visualization.Query('chartdata;jsessionid="+jsessionid?randomBitToBypassCaching='+random+"); 
相關問題