2012-04-27 50 views
2

我目前有一個RESTful web服務,它通過它的會話識別客戶端。跨域AJAX/Javascript - 人工使用sessionid

我有一個客戶端,它使用ajax/javascript來訪問RESTful web服務的內容。我通過回覆帶有標題的請求來允許這種情況發生:Access-Control-Allow-OriginAccess-Control-Allow-Credentials,Access-Control-Allow-Methods

但是,雖然客戶端可以訪問內容的每個請求被視爲不同的會話,因爲Cookie不能跨域使用。

我不想修改我的服務器代碼以專門迎合這種風格的客戶端,我更喜歡圍繞客戶端的工作來給出使用會話的外觀。

因爲我不想在會話中存儲任何內容,而只是使用jsessionid作爲客戶端標識符,所以我認爲我可以人爲地將&jsessionid=注入到URL中,至少從服務器端來看,使客戶端看起來像要正確跟蹤會議。

這似乎不工作 - 有人可以建議我如何使我的客戶端行爲,就像它使用相同的sessionid?

+0

@ Graeme:很高興幫助!我已經將它轉化爲答案。 – 2012-04-27 15:54:53

回答

2

...我以爲我可以人爲地注入& JSESSIONID =到URL ...

jsessionid不是查詢字符串參數。您希望人爲地添加;jsessionid=...(在URL中的任何&之前),而不是&jsessionid=...

+0

值得注意的是,cookie中的jsessionid值將優先於URL中的jsessionid值。 – Graeme 2012-04-27 16:00:58

0

對於背景......我製作了一個名爲kitgui.com的產品,它允許跨域通信,並模擬頁面內容管理,但實際上是通過iframe將跨域交談到安全服務器。

您不必修改您的服務器代碼。假設你不需要IE8以下的支持,你可以使用iframe + postMessage。所有其他現代瀏覽器都支持這一點。對於較低瀏覽器也有iframe輪詢技術。您不需要在非SSL的查詢字符串中公開您的會話標識。您可以與您的iframe進行交談,以獲取通過javascript登錄的狀態。會話信息保留在iframe的域中。

此鏈接可以幫助您 - >http://benalman.com/projects/jquery-postmessage-plugin/