亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 Ajax 更改服務器端語言 cookie,就像客戶端一樣?

如何使用 Ajax 更改服務器端語言 cookie,就像客戶端一樣?

紅顏莎娜 2023-10-20 15:02:08
我有兩個新聞網站,一個是西班牙語,一個是英語:es.example.com // Spanishexample.com // English但從主域(英語)我正在集成一個系統,以便能夠以另一種語言顯示新聞,例如:example.com/es/url-de-la-noticia/ // Spanish根據該 URL,我創建一個“cookie”,其中將存儲 URL 的語言,這是第一個文件夾/子文件夾或目錄“/es/”://I create the cookies automatically for the subdomain and for the URLs in Spanish.if($FOLDER_LANG === "es" || $SUBDOMAIN_LANG === "es") {    setcookie ('language', 'es', time()+60*60*24*365, '/', '.example.com');}使用此參數,網站的新聞將以西班牙語顯示:es.example.com通過子域es或通過西班牙語的 URL example.com/es/url-de-la-noticia/=es//We verify the existence of the cookieif(isset($_COOKIE['language'])){    //We print variables of the language in coincidence of the value that the cookie stores    if($_COOKIE['language']==='en'){        $website_title = " | Sitio en espa?ol";        $lang = 'es';        $language = "es";    }elseif($_COOKIE['language']==='es'){        $website_title = " | WebSite Ingles";        $lang = 'en';        $language = "en";    }} else {    //In case there is no cookie, I show the English language by default.    $website_title = " | WebSite Ingles";    $lang = 'en';    $language = "en";}到目前為止,一切似乎都運行正常。但是當我嘗試通過Ajax更改語言時,問題就出現了,雖然Ajax代碼確實發送和發送信息,但由于某種原因它并沒有替換cookie,也就是說,如果我點擊英文語言,它并沒有改變它,語言的變化。language.ini.php文件將負責更改語言、創建各自的 cookie。<?php    if (isset($_POST['lang'])) {        $lang = $_POST['lang'] ?: '';            if ($lang === "en") {            setcookie ('language', 'en', time()+60*60*24*365, '/', 'example.com');        } elseif ($lang === "es") {            setcookie ('language', 'es', time()+60*60*24*365, '/', 'es.example.com');        }    }?>
查看完整描述

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.comes.example.com將使用。

根據RFC6265

Cookie 的工作原理

  1. Cookie通常會由服務器端請求設置,瀏覽器會保存它們。

  2. 瀏覽器在每個請求中發送 Cookie。

  3. 服務器可以從瀏覽器的請求中訪問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' });


? ? });

});


查看完整回答
反對 回復 2023-10-20
?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

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


查看完整回答
反對 回復 2023-10-20
?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

可以針對您的瀏覽器(無論是 AJAX)發出的所有請求發送和接收 Cookie。您還可以更新已經設置的cookie,setcookie您似乎已經在使用該cookie。您可以通過在選項卡下方Request Headers和選項卡Response Headers中查看來驗證相同的內容Networks。

可能還有其他原因導致了您的問題。


查看完整回答
反對 回復 2023-10-20
?
largeQ

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。

如果您需要更多幫助或者這對您有幫助,請告訴我......


查看完整回答
反對 回復 2023-10-20
?
不負相思意

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 政策。瀏覽器。


查看完整回答
反對 回復 2023-10-20
  • 5 回答
  • 0 關注
  • 213 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號