Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的android chrome Cookie集在PHP$\u Cookie中不可用_Javascript_Android_Google Chrome_Cookies - Fatal编程技术网

javascript中的android chrome Cookie集在PHP$\u Cookie中不可用

javascript中的android chrome Cookie集在PHP$\u Cookie中不可用,javascript,android,google-chrome,cookies,Javascript,Android,Google Chrome,Cookies,我已经为我的公司建立了一个活动的在线登记表。我使用我们银行收集信用卡信息的服务,因为我不想把这一切弄得一团糟。因此,我的表单收集所有必要的数据,设置一个cookie,然后转发到银行提供给我的php页面,该页面检查浏览器中的cookie集,如果它在那里,则回显实际的html,然后转发到信用卡数据输入页面。如果尚未设置cookie,则页面将显示一条消息,说明页面需要JavaScript,并返回打开页面。(请注意,这不是我的密码,它来自银行)。下面是一些代码片段。我将cookie设置为: docume

我已经为我的公司建立了一个活动的在线登记表。我使用我们银行收集信用卡信息的服务,因为我不想把这一切弄得一团糟。因此,我的表单收集所有必要的数据,设置一个cookie,然后转发到银行提供给我的php页面,该页面检查浏览器中的cookie集,如果它在那里,则回显实际的html,然后转发到信用卡数据输入页面。如果尚未设置cookie,则页面将显示一条消息,说明页面需要JavaScript,并返回打开页面。(请注意,这不是我的密码,它来自银行)。下面是一些代码片段。我将cookie设置为:

document.cookie = "fam=barn; path=/pmtproc";
在名为setCookie()的javascript函数中,除了try/catch块之外,这是该函数中唯一的一行代码。然后,在提交表单时将其转发到的页面(提交表单的“操作”中的url)中,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!":
}
if(isset($\u COOKIE['name'])){
setcookie('name','',time()-3600);
echo$x;
}否则{
echo(“此页面需要JavaScript,请转到”):
$url=htmlspecialchars($_服务器['HTTP_REFERER']);
回声“”
echo”,打开JavaScript并重试-谢谢!:
}
($x包含该页面的html,当“设置Javascript”时,该页面只会转发到银行的信用卡数据输入站点。最有趣的是,注册表单到处都使用Javascript,因此如果未启用Javascript,他们甚至无法进入检查cookie的页面)

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

现在,这个问题的奇怪之处在于,它在桌面浏览器(Mac上的FF 45和Chrome 49)上运行良好,但在我的Android手机(Chrome 49和Android 4.4.4)上却不行。我还没有在其他任何东西上测试过它

我已经使用Chrome的远程调试工具在手机上调试了它,setCookie没有捕捉到任何异常或其他抱怨。它似乎很好地设置了cookie,但是当它进入第二个php页面时,没有cookie。一点饼干也没有-(

更奇怪的是,我有一个完全相同的设置,在一个不同的注册表单中,它现在是实时的,并且工作得很好(虽然该文件是本地的——我知道,我知道它应该包含在一个文件中,但我还没有来得及这么做),然后转发到一个php文件,该文件使用完全相同的代码检查cookie(虽然在不同的文件中,所以我可以在不破坏当前文件的情况下测试新注册)

我相信还有其他信息可以帮助解决这个问题,所以请告诉我你还需要知道什么来帮助我

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


编辑4-6-16:我注册了browserstack.com,以便在其他设备/网站上进行测试,这在Galaxy S4上运行得很好,KitKat(4.4.4),这就是我的手机(虽然是摩托罗拉Droid Mini,但我没有这个选项),Moto X第二代运行棒棒糖(5)。它可能只是我的手机。但如果有任何想法,我都将不胜感激。

我注意到,在一个带有https和SameSite=“None”的网站上,没有设置cookies。当我添加“secure”属性时,它起到了作用:

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的页面,并且您希望两者都访问cookies时……那么您可能应该始终在没有“secure”属性的情况下设置SameSite=lax(我没有测试过这个)

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