讓 Safari 對同一主機名上的不同 URL 使用不同的自動完成功能
我有一個網路伺服器在同一個 SSL VirtualHost 上發布不同的服務,最常用的兩個是 PhpMyAdmin 和 Cacti。這些(和其他)使用“cookie”樣式的身份驗證,以 HTML 形式詢問使用者和密碼(因此不使用 HTTP 身份驗證)。
由於在同一個主機名上,Safari 瀏覽器並沒有很好地管理儲存的密碼:如果我使用使用者 foo 登錄到一個應用程序,然後轉到應用程序二,它會在登錄表單中向我建議使用者 foo 及其密碼。僅將使用者名更改為 bar 就足以讓 Safari 在其表單欄位中自動完成正確的密碼。煩人,但我可以忍受 - 與我們使用的密碼相比,使用者名簡短且易於記憶。
更新到 safari5 後,這似乎不再正確:如果我在 safari(實際上是 OSX 上的使用者鑰匙串)中儲存https://www.foobarbaz.com/app1的憑據和https://www.foobarbaz.com的憑據/app2似乎無法根據 url 自動完成。即使編輯鑰匙串以添加路徑(預設情況下它只會儲存主機名)也無濟於事。
我能做些什麼讓它按照我想要的方式工作,同時仍然將所有內容保留在一個主機名上?修改任何伺服器端當然是可能的,但我不能將應用程序切換到 HTTP Auth(而且不是每個人都會支持它)來使用不同的“領域”。
據我了解,在 HTTP 請求 URI 中,主機是方案(即 http://)和頂級域結尾(即
.com/
)之間的所有內容,主機右側的所有內容都是對主機處理。解決問題的最佳方法是使用子域 ..
https://app1.foobarbaz.com/
和https://app2.foobarbaz.com
. 您需要將子域放在域的 DNS 區域中foobarbaz.com
,並在 Web 伺服器上配置虛擬主機以使用/app1
和處理請求/app2
。Apache 和 IIS 都可以完全滿足您的需求,而無需重新配置應用程序。您可能必須獲取(或創建)新證書才能使 SSL 正常工作而不會出現瀏覽器安全錯誤。根據(恕我直言愚蠢的)組織政策,顯然這是不允許的。OP 應該努力改變這個政策,因為它與網際網路的工作方式相衝突。
也就是說,另一種選擇是修改每個應用程序以為其自身部署一個特定的 cookie,然後查看所有返回的 cookie 來為自己找到一個。如何完成取決於平台,這是一個 StackOverflow 問題。