2012-02-24 98 views
2
  1. 如果我打開我的工作在同一個瀏覽器的一個新的選項卡(或窗口)(說Firefox)的不同的客戶端,然後它會被認爲是由同一個客戶端服務器。不同的瀏覽器是指在同一臺機器

  2. 但是,如果我從不同的瀏覽器(例如IE)打開相同的URL,則服務器無法將其識別爲同一個客戶端。

那麼,服務器如何在內部識別客戶端呢?

如果我想要一個服務器甚至從不同的瀏覽器(而不是認爲它是一個新的客戶端)唯一標識一個客戶端,我該如何從Web服務器(使用Servlets)做到這一點?

+0

使用會話ID分配給您連接的瀏覽器。 – Shahzeb 2012-02-24 05:37:00

+0

我認爲服務器使用Cookies來區分客戶端。 Cookie在瀏覽器中保留,來自不同瀏覽器的相同URL請求將被視爲不同,但來自兩個不同TAB的URL將被視爲相同。這可能是許多原因之一。 – JProgrammer 2012-02-24 05:38:17

回答

3

「如果我打開我的工作在同一瀏覽器的新選項卡(或窗口)(說Firefox)的」

你的前提是不準確的。

如果我使用同一瀏覽器(FireFox或Chrome等)的不同配置文件,它將被視爲不同的會話。

這就是我的想法 - 我可以隱私不讓服務器或Web服務看到我的其他配置文件。作爲用戶,我永遠不會讓您的應用跨越查詢我的其他瀏覽器或配置文件的那條線。此外,FF,Chrome,Safari,IE等不會爲他們的Cookie共享相同的存儲架構。

當然,你可以花大量的時間,試圖破解了一個桌面應用程序,將瀏覽器之間交換Cookies - 但是這將是無用的,因爲

  • 你怎麼解密這些cookie ?
  • 你是否願意爲所有操作系統編寫相同的應用程序
  • 那麼你將如何說服我相信你讓我們在我的系統上安裝cookie入侵應用程序?

您的時間將會更好用於行業接受和普遍的做法。

但是,如果你的應用有用戶登錄/驗證,那麼我會想你的應用程序來認識我和我的歷史,無論哪臺PC,哪個配置文件,或者世界我在的一部分。

因此,你的問題的答案是 - 用戶認證。

您不應該在服務器周圍處理多個PC或瀏覽器「會話」以識別相同的會話ID。它會變得柔軟,毛茸茸,雜亂。

不要重新發明輪子。使用OpenID或OAuth2。

OpenID消費者實現起來非常簡單。儘管簡單,但在實現openID方面沒有太多的文獻例子。但Google已經在OAuth上提供了大量有用的文獻資料。

Google Federated登錄/ OAuth也非常有趣且易於實現。即使使用GWT。

問題依然存在 - 爲什麼我想在用戶身份驗證過程中將問題複雜化,當我需要的是跨多個「瀏覽器會話」共享會話時。原因是安全。即使它是內部公司應用程序。你認爲你的經理人想知道公司裏的任何人都可以僞裝他們的會話嗎?

當你深入到你的項目中時,你會意識到試圖逃離用戶認證路線是沒有意義的。並且沒有必要掀起你自己的安全會話認證框架。

2

從技術上講,這應該是不可能的。服務器通過在其上設置一個cookie來識別客戶端,而瀏覽器不共享他們的cookie(他們只在選項卡之間共享它們,這就是爲什麼你看到不同的標籤被視爲同一個客戶端)。您可以嘗試通過IP地址進行識別,但是所有代理背後的客戶端都會被錯誤地識別爲同一個客戶端。 任何其他唯一標識客戶端的方式都涉及從機器獲取信息(例如MAC地址),出於安全原因,瀏覽器不允許這樣做。

相關問題