在PHP中设置的android chrome Cookie Cookie在PHP中无法使用$ _COOKIE

时间:2016-03-31 23:20:26

标签: javascript android google-chrome cookies

我为我公司的活动设置了一个在线注册表。我使用我们银行收集信用卡信息的服务,因为我不想惹恼所有这一切。所以会发生什么,我的表格会收集所有必要的数据,设置一个cookie,然后转发到银行给我的php页面,该页面检查浏览器中设置的cookie,如果它在那里,则回显实际的html,然后只转发到信用卡数据输入页面。如果尚未设置cookie,页面将显示一条消息,指出页面需要JavaScript并返回并打开它。 (请注意,这不是我的代码,它来自银行)。所以,这里有一些代码片段。我这样设置了cookie:

document.cookie = "fam=barn; path=/pmtproc";

在一个名为setCookie()的javascript函数中,这是该函数中唯一的代码行,但try / catch块除外。然后,在提交表单时转发到的页面(提交表单的“操作”中的网址),将像这样检查cookie:

if (isset($_COOKIE['name'])){
    setcookie('name', '', time()-3600);
    echo $x;
} else {
   echo ("JavaScript is needed for this page. Please go "):
   $url = htmlspecialchars($_SERVER['HTTP_REFERER']);
   echo "<a href='$url'>back</a>"
   echo ", turn on JavaScript and try again - thanks!":
}

($ x包含页面的html,当“Javascript设置好”时,它会转发到银行的信用卡数据输入网站。最有趣的部分是注册表单在整个地方使用javascript,所以他们无法'如果没有启用javascript,甚至获取到检查cookie的页面。

setCookie()函数是在返回true之前由提交按钮(processForPmnt())调用的函数的最后一个函数。在此之前,processForPmnt()从页面上的其他表单添加元素,其中包含单独的注册数据 - 该页面一次接受多个注册。 (所以基本上我将各个表格上的元素复制到将要提交的表格中。)

现在,这个问题的一个奇怪的部分是,这适用于桌面浏览器 - Mac上的FF 45和Chrome 49 - 但不适用于我的Android手机(Chrome 49和Android 4.4.4)。我还没有测试过其他任何东西。

我使用Chrome的远程调试工具在手机上调试了它,并且setCookie没有捕获任何异常或其他抱怨。它似乎设置cookie就好了,但是当它到达第二个php页面时,没有cookie。根本没有饼干。 : - (

更奇怪的部分是,我现在有一个不同的注册表单中的这个完全相同的设置,它工作得很好。我以完全相同的方式设置cookie,在javascript中的相同setCookie()函数中(虽然该文件是本地的 - 我知道,我知道它应该在我包含的一个文件中,但我还没有去做) ,然后转发到一个php文件,使用完全相同的代码检查cookie(虽然在不同的文件中,所以我可以测试新的注册而不会破坏当前的注册)。

我确信还有其他信息可以帮助您解决问题,所以请告诉我您需要知道的其他信息才能提供帮助。

这可能是非常荒谬的事情(我已经检查过以确保设置cookie代码是相同的 - 从工作文件复制/粘贴到不工作的文件中),我只是看不到它......

编辑4-6-16:我注册了browserstack.com,所以我可以在其他设备/网站上进行测试,这对于使用KitKat(4.4.4)的Galaxy S4工作得很好,这就是我的手机有(虽然它是摩托罗拉Droid Mini,但我没有那个选项)和Moto X 2nd Gen运行Lollipop(5)。它可能只是我的手机。但是任何想法都会受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

我注意到在具有https和SameSite =“ None”的网站上,未设置cookie。当我添加“安全”属性时,它起作用了:

var is_ssl = window.location.protocol === "https:";

var ss = is_ssl ? ";SameSite=None" : ";SameSite=Lax";
var sec = is_ssl ? ";secure" : "";

document.cookie = name + " = " + value + ss + sec;

唯一的问题是,当您有一些带有HTTPS的页面,而有些没有HTTPS的页面,并且您都希望两者都访问Cookie时。那么也许您应该始终将SameSite = lax设置为不带有“安全”属性(我尚未对此进行测试)

警告::要保护您的数据,请确保您了解不同的SameSite值。