草庐IT

php - 无法在 Chrome 中访问 c​​ookie,在 Firefox 中可以正常工作

coder 2024-01-04 原文

基本情况及基本相关信息: 我有一个在开始前执行的 php 代码 <doctype>标签。希望是(如有必要)在加载任何其他内容之前根据用户浏览器的语言首选项发送重定向。

该脚本尝试根据支持的最高语言偏好做两件事:

  1. 使用 php:setcookie()用两个字母的语言代码创建一个 cookie。
    • 示例 cookie 名称 = 值:x_language = es
  2. 使用 php: header("Location: ". $requestedSite);重定向到子域,
    • 示例域:es.domain.com

例子:

if (isset($_COOKIE['x_language'])) {
    -Determine correct subdomain based on cookie value-
    -If not currently on that subdomain, redirect to it-
} else {
    setcookie('x_language','es',time() + 31536000 ,'/','.domain.com' );
    header("Location: " . $requestedSite);
}

问题: Firefox 完美运行。 Chrome(和其他浏览器)根本无法识别 cookie。

我把它归结为:

  • print_r($_COOKIE)在 Firefox 中正常工作,并返回一个可爱的填充数组。
  • print_r($_COOKIE)在 Chrome 中失败,并返回一个空数组。

这是问题的核心,我的函数无法识别 cookie 的存在,因为 Chrome 无法识别。

  • 我已确保每个浏览器都接受 cookie。
  • 我已经检查了开发工具以确保所有浏览器上都有 cookie,(确实如此)。
  • 我意识到 cookie 的值在下一个页面加载之前不可用,但这不是这里的问题。即使在设置之后,它也不会读取。
  • 初始setcookie()上面没有输出;

那么如何让 Chrome(和其他浏览器)识别它自己的 cookie?!有谁知道为什么这一切在 Firefox 上都能完美运行但在其他地方却失败了?


我很高兴地决定试试这个。我创建了一个仅包含以下内容的文件:

<?php
print_r($_COOKIE);
?>

再次,我在 Firefox 中看到了 cookie 数组。同时,在 Chrome、IE、Opera、Safari 中,我得到一个空数组。这可能是服务器问题吗?

最佳答案

OP 返回答案:

好吧,我将此添加为“答案”,以防其他人遇到这种(完全奇怪的)行为并落在这里:

事实证明,我的托管服务提供商正在对我的 WordPress 网站进行一些我没有意识到的非常激进的缓存。

在我发布问题时,我认为使用 WordPress 无关紧要,但显然是相关的。

基本上它是这样做的:


使用干净的缓存:

  • 访问者 1 访问了网站。
  • php 按预期处理并生成输出。
  • 向访问者 1 提供 php 输出(基于他的浏览器参数等)。

  • 访问者 2 访问了网站。访问者 2 看到了*访问者 1 的站点版本。

每次清除缓存时,php 只处理一次。

这种缓存行为意味着通过 php 访问 cookie 根本无法正常工作,但使用 Javascript 访问它们却可以。

(重要说明:事实证明,对于所有登录到 wordpress 查看网站的用户,上述缓存行为都被禁用,这很常见WordPress 缓存插件的行为。这就是为什么我在 Firefox 中看到的行为与在其他浏览器中看到的行为不同,因为我是使用 Firefox 主动登录的。这对其他人来说可能是有用的信息。)


我的解决方案:

使用 Javascript 对 .php 文件运行 AJAX 查询,该文件将处理访问者的语言首选项并将输出返回为 2 个字符的代码,(即 'en' 'es' 'pt' ' de'等)

使用 AJAX 调用 php 允许我使用 php 的服务器端访问浏览器的语言首选项,同时绕过主机的 super 农业缓存。

希望对大家有所帮助!感谢所有试图帮助我解决这个问题的人。

关于php - 无法在 Chrome 中访问 c​​ookie,在 Firefox 中可以正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15302050/

有关php - 无法在 Chrome 中访问 c​​ookie,在 Firefox 中可以正常工作的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  3. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  4. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  5. ruby - 我可以使用 Ruby 从 CSV 中删除列吗? - 2

    查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html

  6. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  7. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  8. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  9. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  10. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

随机推荐