safari瀏覽器cookie問題

2022-03-09 10:03:00 字數 1243 閱讀 3935

這個題目可能有點大了,這裡主要討論一種解決safari瀏覽器阻止第三方cookie問題。

場景

公司存在多個網域名稱(a.com,b.com,co.com)這些網域名稱應該統一帳號狀態,a.com為公司主網域名稱,其中帳號系統為passport.a.com,b.com現在做乙個活動,需要使用者進行登入,那麼就跳轉到passport.a.com進行登入,登入完成完根據引數會跳至活動頁面。由於passport.a.com使用的jsonp的形式對a.com,b.com和c.com就行設定登入狀態操作(在(如何建立帳號統一服務)中有詳細說明),其他瀏覽器(chrome、ff、ie等)在預設瀏覽器配置下都沒有問題,只有在safari下存在這個問題,原因在於:safari隱私設定,預設阻止第三方cookie設定,但是只要你訪問過一次(這裡的訪問必須是使用者手動操作,不能通過js進行跳轉操作)它就允許了。如果是這種情況,那麼登入成功跳轉回去,使用者在b.com或c.com仍然沒有登入狀態?

嘗試解決方案

1.將頁面放在自己伺服器下面

也就是說,將passprot.a.com的登入頁面在b.com下自己在實現一次,這樣可以保證b.com有登入狀態,但是存在一下幾點問題:

2. 代替使用者訪問一次需要的網域名稱

3.服務端302跳轉的形式

既然第三方不能操作,那就使用自己的子域就行操作就行了。首先保證自己的東西都放在自己的網域名稱下處理,如果必須要引入第三方的介面時,可以考慮將之前的jsonp請求,轉化為302跳轉的方式實現。這種形式也有問題,safari瀏覽器最大的跳轉次數是15次,超過15次瀏覽器就會無法解析。各瀏覽器302次數限制可以檢視瀏覽器重定向(302)次數限制問題。

確定方案

以上幾種方案,可以根據自己業務的實際情況選擇合適的方式。

這樣就完成了所有網域名稱登入狀態的設定,準確來說是所傳網域名稱列表會被設定上登入狀態。

總結

這裡是以登入為例,解決safari瀏覽器預設阻止第三方cookie問題的,在其他場景下看情況使用不同的方案,當然在這裡也是拋磚引玉,希望能得到更好,更方便的實現方式。再說點兒題外話,討論這個方案用了不少時間,有很多方案很簡單但是我們不能使用是考慮到我們的實現成本問題,已經對使用者的影響,這種情況下,盡可能少的讓使用者來操作什麼完成你本身就應該完成的事情。總之乙個原則,能不讓使用者做的盡量別讓使用者做,使用者的認知成本和學習成本你都是無法評估的。

繼續關注safari瀏覽器,safari漢化版。

和利用nightly的webkit使safari for windows正常顯示中文 如今已經有國人將safari軟體漢化,出現了漢化版的補丁。漢化版資訊來自digidea的blog,如果有興趣的可以看看下面的資訊,下面是漢化者的原話 時間緊急.目前只把主要的部分漢化了.還有很多細節沒有去更改.這些...

使用瀏覽器Cookie

cookie是有netscape瀏覽器1.0版引入的。netscape 的開發人員發明了cookie。1.cookie 是如何工作的?web伺服器建立乙個cookie時,乙個附加的http頭部在瀏覽器顯示頁面時被傳送到瀏覽器。http頭部類似如下形式 set cookie message hello...

瀏覽器 cookie 限制

一 瀏覽器允許每個網域名稱所包含的 cookie 數 microsoft 指出 internet explorer 8 增加 cookie 限制為每個網域名稱 50 個,但 ie7 似乎也允許每個網域名稱 50 個 cookie update to internet explorer s cooki...