5 回答

TA貢獻1772條經驗 獲得超8個贊
服務器端 Ajax 調用(修復)
在你的language.ini.php中你必須改變這一行:
setcookie?('language',?'es',?time()+60*60*24*365,?'/',?'es.example.com');
到 :
?setcookie?('language',?'es',?time()+60*60*24*365,?'/',?'example.com');
因為如果您在標頭中指定cookie 的域,則它將不是僅主機 cookie,并且在您的兩者中example.com
都es.example.com
將使用。
根據RFC6265
Cookie 的工作原理
Cookie通常會由服務器端請求設置,瀏覽器會保存它們。
瀏覽器在每個請求中發送 Cookie。
服務器可以從瀏覽器的請求中訪問cookie。
Cookie 是必不可少的,因為Http 是無連接協議,服務器希望將數據與客戶端關聯并在下一個請求中使用它。
首選場景(所需的解決方案)
只要您的用戶決定以他們喜歡的語言查看您的網站。并且您的服務器不會對其執行任何操作(沒有控件,沒有安全線程)。
你可以使用快捷方式。
在您的客戶端設置 Cookie
然后刪除language.ini.php文件。
當用戶嘗試在瀏覽器中導航時,您可以通過純 JavaScript 來完成此操作。他/她的請求將通過已設置 JavaScript 的新 Cookie 發送。
只是您必須注意不要在 Cookie 上啟用 HTTP-Only 標志(這可以防止 Js 操作 Cookie)。
Jquery 示例:
$.cookie('language',?'',?{?expires:?365,?path:?'/',?domain:?'example.com'?});
您的 js 可以如下所示,而不是發送 ajax 請求:
$(function() {
? ? $(".lang").click(function(e) {
? ? ? ? e.preventDefault();
? ? ? ? var language = $(this).attr('data-value');
? ? ? ? $.cookie('language', language, { expires: 365, path: '/', domain: 'example.com' });
? ? });
});

TA貢獻1875條經驗 獲得超3個贊
也許 J. Mick,使用會話存儲并不是解決這個問題的方法,也許使用 HTML Web 存儲更合適?至少這樣,您不必刷新頁面來更新 cookie 值等,它可以直接從 JavaScript 寫入和讀取。

TA貢獻1824條經驗 獲得超6個贊
可以針對您的瀏覽器(無論是 AJAX)發出的所有請求發送和接收 Cookie。您還可以更新已經設置的cookie,setcookie
您似乎已經在使用該cookie。您可以通過在選項卡下方Request Headers
和選項卡Response Headers
中查看來驗證相同的內容Networks
。
可能還有其他原因導致了您的問題。

TA貢獻2039條經驗 獲得超8個贊
使用 chrome 擴展,您可以使用 javascript api 輕松修改服務器 cookie 或您想要的任何 cookie
https://developers.chrome.com/docs/extensions/reference/cookies/
通過這種方式,您可以訪問任何 cookie,這與常規 DOM javascript 不同,例如,常規 DOM javascript 只能訪問非 httpOnly cookie。 https://www.cookiepro.com/knowledge/httponly-cookie/
當在服務器上創建 cookie 并將 httpOnly 屬性設置為 true 時,則無法從 DOM javascript 讀取此 cookie。但 chrome webextension api 確實可以訪問這些 cookie。
如果您需要更多幫助或者這對您有幫助,請告訴我......

TA貢獻1777條經驗 獲得超10個贊
對于同一件事,您似乎有多個 UI。您有一個英語和一個西班牙語網站。由于域不同,如果您在不同的域上有不同的會話和 cookie,我不會感到驚訝。
但是,為了避免重復代碼和功能,至少可以在某個 URL 上提供底層邏輯,從而向您的西班牙語和英語版本公開 API。
您的方法是有缺陷的,因為您沒有重新加載頁面。然而,如果你有這三個部分,你就可以解決這個問題:
應用程序編程接口
英文界面
西班牙語用戶界面
英語 UI 和西班牙語 UI 都將以類似的方式使用 API,并且在 API 級別上,實際的英語/西班牙語文本的相關性較低,但 API 將是確定語言的級別。
因此,如果您單擊西班牙語網站上的英語按鈕或英語網站上的西班牙語按鈕,則會發生以下情況:
請求被發送到 API
API 為其他語言的站點生成令牌,因此用戶無需手動登錄
包含該令牌的鏈接將返回到 UI
UI 會自動重定向到其他語言的 UI
這可確保域正確并且頁面已加載
一旦訪問其他 URL,就會向 API 發送請求
API 驗證令牌
如果令牌有效,則允許用戶進入系統并銷毀令牌
這就是我的處理方式。起初,您的 API 可能非常簡單,僅處理此功能,但理想情況下,將邏輯與兩個 UI 分開會很棒。
由于此解決方案涉及向 API 發送 AJAX 請求(該請求將位于不同的 URL 上),因此您需要確保擁有正確的 HTML 標頭,以允許您的頁面向 API 發送請求,而不會違反該網站的 CORS 政策。瀏覽器。
添加回答
舉報