第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

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

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

紅顏莎娜 2023-10-20 15:02:08
我有兩個新聞網(wǎng)站,一個是西班牙語,一個是英語:es.example.com // Spanishexample.com // English但從主域(英語)我正在集成一個系統(tǒng),以便能夠以另一種語言顯示新聞,例如:example.com/es/url-de-la-noticia/ // Spanish根據(jù)該 URL,我創(chuàng)建一個“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');}使用此參數(shù),網(wǎng)站的新聞將以西班牙語顯示: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更改語言時,問題就出現(xiàn)了,雖然Ajax代碼確實發(fā)送和發(fā)送信息,但由于某種原因它并沒有替換cookie,也就是說,如果我點擊英文語言,它并沒有改變它,語言的變化。language.ini.php文件將負責更改語言、創(chuàng)建各自的 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 回答

?
料青山看我應(yīng)如是

TA貢獻1772條經(jīng)驗 獲得超8個贊

服務(wù)器端 Ajax 調(diào)用(修復(fù))

在你的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將使用。

根據(jù)RFC6265

Cookie 的工作原理

  1. Cookie通常會由服務(wù)器端請求設(shè)置,瀏覽器會保存它們。

  2. 瀏覽器在每個請求中發(fā)送 Cookie。

  3. 服務(wù)器可以從瀏覽器的請求中訪問cookie。

Cookie 是必不可少的,因為Http 是無連接協(xié)議,服務(wù)器希望將數(shù)據(jù)與客戶端關(guān)聯(lián)并在下一個請求中使用它。

首選場景(所需的解決方案)

只要您的用戶決定以他們喜歡的語言查看您的網(wǎng)站。并且您的服務(wù)器不會對其執(zhí)行任何操作(沒有控件,沒有安全線程)。

你可以使用快捷方式

在您的客戶端設(shè)置 Cookie

然后刪除language.ini.php文件。

當用戶嘗試在瀏覽器中導(dǎo)航時,您可以通過純 JavaScript 來完成此操作。他/她的請求將通過已設(shè)置 JavaScript 的新 Cookie 發(fā)送。

只是您必須注意不要在 Cookie 上啟用 HTTP-Only 標志(這可以防止 Js 操作 Cookie)。

Jquery 示例:

$.cookie('language',?'',?{?expires:?365,?path:?'/',?domain:?'example.com'?});

您的 js 可以如下所示,而不是發(fā)送 ajax 請求:

$(function() {

? ? $(".lang").click(function(e) {

? ? ? ? e.preventDefault();

? ? ? ? var language = $(this).attr('data-value');

? ? ? ? $.cookie('language', language, { expires: 365, path: '/', domain: 'example.com' });


? ? });

});


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

TA貢獻1875條經(jīng)驗 獲得超3個贊

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


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

TA貢獻1824條經(jīng)驗 獲得超6個贊

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

可能還有其他原因?qū)е铝四膯栴}。


查看完整回答
反對 回復(fù) 2023-10-20
?
largeQ

TA貢獻2039條經(jīng)驗 獲得超8個贊

使用 chrome 擴展,您可以使用 javascript api 輕松修改服務(wù)器 cookie 或您想要的任何 cookie

https://developers.chrome.com/docs/extensions/reference/cookies/

通過這種方式,您可以訪問任何 cookie,這與常規(guī) DOM javascript 不同,例如,常規(guī) DOM javascript 只能訪問非 httpOnly cookie。 https://www.cookiepro.com/knowledge/httponly-cookie/

當在服務(wù)器上創(chuàng)建 cookie 并將 httpOnly 屬性設(shè)置為 true 時,則無法從 DOM javascript 讀取此 cookie。但 chrome webextension api 確實可以訪問這些 cookie。

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


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

TA貢獻1777條經(jīng)驗 獲得超10個贊

對于同一件事,您似乎有多個 UI。您有一個英語和一個西班牙語網(wǎng)站。由于域不同,如果您在不同的域上有不同的會話和 cookie,我不會感到驚訝。

但是,為了避免重復(fù)代碼和功能,至少可以在某個 URL 上提供底層邏輯,從而向您的西班牙語和英語版本公開 API。

您的方法是有缺陷的,因為您沒有重新加載頁面。然而,如果你有這三個部分,你就可以解決這個問題:

  • 應(yīng)用程序編程接口

  • 英文界面

  • 西班牙語用戶界面

英語 UI 和西班牙語 UI 都將以類似的方式使用 API,并且在 API 級別上,實際的英語/西班牙語文本的相關(guān)性較低,但 API 將是確定語言的級別。

因此,如果您單擊西班牙語網(wǎng)站上的英語按鈕或英語網(wǎng)站上的西班牙語按鈕,則會發(fā)生以下情況:

  • 請求被發(fā)送到 API

  • API 為其他語言的站點生成令牌,因此用戶無需手動登錄

  • 包含該令牌的鏈接將返回到 UI

  • UI 會自動重定向到其他語言的 UI

  • 這可確保域正確并且頁面已加載

  • 一旦訪問其他 URL,就會向 API 發(fā)送請求

  • API 驗證令牌

  • 如果令牌有效,則允許用戶進入系統(tǒng)并銷毀令牌

這就是我的處理方式。起初,您的 API 可能非常簡單,僅處理此功能,但理想情況下,將邏輯與兩個 UI 分開會很棒。

由于此解決方案涉及向 API 發(fā)送 AJAX 請求(該請求將位于不同的 URL 上),因此您需要確保擁有正確的 HTML 標頭,以允許您的頁面向 API 發(fā)送請求,而不會違反該網(wǎng)站的 CORS 政策。瀏覽器。


查看完整回答
反對 回復(fù) 2023-10-20
  • 5 回答
  • 0 關(guān)注
  • 233 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號