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条经验 获得超7个赞
使用 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 政策。浏览器。
添加回答
举报