【问题标题】:Setting cookies on domain/subdomain在域/子域上设置 cookie
【发布时间】:2011-09-07 21:44:52
【问题描述】:

您好 * 的好人,我有一个问题,我希望你们中的一些人可以帮助我。 假设我应该在 www.webshop.com 域上创建某种 Wordpress 网上商店,用英语编写,并为该域提供一个名为“cartItems”的 cookie。好的,没问题。

问题是我还需要制作该网站的德语版本,并且我需要区分英语和德语 cookie。

现在,我的问题是,例如,如果德国网站位于 www.webshop.com/de/ 上,我可以将德国 cookie 设置为仅适用于 /de/ 域,对吗? 但是我怎样才能设置英语 cookie 将在除 /de/ 之外的所有域中可用。

如果无法做到这一点,如果德国网站位于 de.webshop.com 上,那是否有可能

感谢大家的帮助

【问题讨论】:

  • /de/ 不是域。为什么不在 cookie 中存储语言标志,甚至在服务器端后端存储?
  • 是的,我明白我只是不知道如何正确表达自己。由于货币不同等等,我不能使用相同的 cookie,我想它可以通过某种转换来完成,但我不是那么好 :)
  • 它被称为“路径”,鉴于在 cookie 的规范中使用了相同的术语,因此在尝试使用这非常技术。无论如何,cookie 路径可能无法解决您的问题,但我想知道这是否是一个好的设计;我有一种感觉,这一切都应该在服务器端完成,而你的 cookie 真的应该只跟踪会话 ID...
  • 我没有做太多关于网上商店的编程,它是一个已经设置好的 wordpress 主题。我需要将这两家商店分开,因为欧元和美元的价格不同,因为主题不支持不同的货币。哦,谢谢你的帮助
  • 好吧,如果 Web 应用程序是固定的,你不能在/en/ 下放置一个,在/de/ 下放置一个并并行运行它们,而不是让一个嵌套在另一个下吗?跨度>

标签: php javascript cookies


【解决方案1】:

这是可能的,当然您必须使用两个不同的 cookie 名称,一个用于 EN 数据,一个用于 DE 数据。

使用不同的路径(www.webshop.com 用于 EN,www.webshop.com/de/ 用于 DE):

// this will be available everywhere, both on the english version and the german one
setcookie ('my_en_cookie_name', 'some data', time() + 24*30*3600, '/');
// this will only be visible when accessing the german website, english version user won't be able to see it
setcookie ('my_de_cookie_name', 'some other data', time() + 24*30*3600, '/de/');

cookie 的路径是后向阻塞的(只能从指定的目录或它的子目录读取,不能从父目录读取),因此如果使用 /de/ 路径设置 cookie,则可以读取它来自 /de/ 或 /de/foo/ 但不是来自 / 或 /bar/。同样的,如果你设置一个路径为 / 的 cookie,它可以在 /de/ 或 /de/foo/ 或 /bar/ 上读取。


使用不同的域(EN 为 www.webshop.com,DE 为 de.webshop.com):

// this will be available everywhere, both on the english version and the german one
setcookie ('my_en_cookie_name', 'some data', time() + 24*30*3600, '/', '.webshop.com');
// this will only be visible when accessing the german website, english version user won't be able to see it
setcookie ('my_de_cookie_name', 'some data', time() + 24*30*3600, '/', 'de.webshop.com');

注意:在域“.webshop.com”上设置 cookie 意味着该 cookie 将被发送到 webshop.com 的 每个 子域,无论它是什么。确保这是你想要的。

【讨论】:

    【解决方案2】:

    有 3 种方法可以分隔英语和德语 cookie

    1) 域: 您可以使用单独的 www。和德。您提到的子域。对我来说这将是最简单的

    2) 路径: 您可以使用路径,但如果您的英文 cookie 设置为“/”,它仍然可以在“/de/”下访问。所以如果你想走这条路,你需要按照 Kerrek 的建议创建一个“/en/”路径。

    3) 名称: 给德国饼干起一个不同的名字

    您需要执行这 3 项中的一项才能获得单独的英语和德语 cookie。我认为拥有一个单独的子域是最好的,因为不仅您的 cookie 路径,而且您的所有资产路径都将是相同的,无论语言如何。

    【讨论】:

      【解决方案3】:

      我个人使用这个插件来解决这个问题: http://wpml.org/

      但如果您更喜欢免费的解决方案,这里有一篇非常好的文章: http://codex.wordpress.org/Multilingual_WordPress

      【讨论】:

      • 有趣的是,直到昨天我都在使用那个插件,而且效果很好(它对 Wordpress v 3.0.5 是免费的)但现在我必须做出改变,因为购物车/货币/idontevenknowanymore问题。谢谢你的评论