PHP / Javascript混合Cookie功能

时间:2015-12-08 20:33:50

标签: javascript php cookies

我正在尝试创建一个将PHP中的javascript与那些令人讨厌的cookie混合的函数。这是有效的;

function CookieSet($name,$value){
  $exp=date('D, d M Y G:i:s e', strtotime('midnight + 1days'));
  print("<script language=\"javascript\" type=\"text/javascript\">");
  print("document.cookie = \"".$name."=".$value."; expires=".$exp.";\";");
  print("</script>");
}

我有一个类似的功能,使用相同的方法删除cookie(重置过期的时间。)我需要以类似的方式获取在PHP中返回的cookie信息。我已经创建了以下函数,但似乎可以让它工作 - php不喜欢它。我确定它在标点符号某处,但似乎无法找到它。

function CookieGet($name) {
print("<script language='javascript' type='text/javascript'>");
print("var name = ".$name." + \"=\";");
print("var ca = document.cookie.split(';');");
print("for(var i=0; i<ca.length; i++) {");
    print("var c = ca[i];");
    print("while (c.charAt(0)==' ') c = c.substring(1);");
    print("if (c.indexOf(name) == 0) ".$str=." c.substring(name.length, c.length);");
print("}");
print("</script>");
return $str;
}

整个程序用于将窗口小部件传递到多个站点。使用纯PHP cookie支持,cookie域设置为源域。通过Javascript创建cookie将cookie域设置为目标域。我很清楚Javascript在浏览器中运行,PHP在服务器端运行。我正在尝试解决跨域cookie问题。是的,我已经审查了其他相关解决方案。如果不是远程交付,这不是问题。

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

您打印用于删除cookie的JS代码的功能有一行问题尝试更改此内容:

print("if (c.indexOf(name) == 0) " . $str . " c.substring(name.length, c.length);");

进入这个:

=

我在$str之后删除了$str,因为这导致了PHP中的解析错误。

但由于print("if (c.indexOf(name) == 0) c.substring(name.length, c.length);"); 是空的而没有做任何事情,你也可以这样做:

if option == 2:
        print("These are the lines of data from the data file:")
        datafile = open("K:/python compiler/datafile.dat","r")
        line = datafile.readline()
        field = line.split(",")
        custid = field[0]
        widgets = field[1]
        gidgets = field[2]
        doodads = field[3]
        count = 0
        while line != "":

            count += 1
            print("\n", count, " - Customer id:", field[0] , "\nWidgets     ordered:", field[1], "\nGidgets ordered:", field[2], "\nDoodads ordered:", field[3] , end = "")
            line = datafile.readline(line )
       datafile.close()

希望有所帮助。

答案 1 :(得分:0)

这应该是一个评论,但它有点长。

  

我需要以类似的方式获取php中返回的cookie信息

我不知道你的意思。 PHP写html(和javascript,和CSS,以及图像和....)。有一种机制可以在HTTP请求中发送cookie($ _COOKIE),因此目标似乎很奇怪。还有其他方法可以将数据恢复到服务器端(在POST中,在URL的查询中,作为AJAX请求中的自定义标头....)但不知道你想要实现什么以及为什么你可以&#39使用正常的方法很难提出建议。

你的PHP函数似乎很困惑。很难推断出你的期望。

print("if (c.indexOf(name) == 0) ".$str=." c.substring(name.length, c.length);");
...
return $str;

$ str在此行执行时未设置。您正在为其分配值&#34; c.substring(name.length,c.length);&#34; (并且还返回相同的字符串)。

通过从PHP代码生成javascript代码,您必须同时调试PHP和Javascript代码以获得有效的解决方案。解决问题的正确方法是在javascript中实现函数(或对象),并使它们在javascript中正常工作(使用调试器,控制台,警报,设置innerHTML等)。然后通过编写一个非常简单的Javascript来适当地注入任何文字来从PHP调用它们......

function CookieGet($name) {
   print "<script language='javascript' type='text/javascript'>\n";
   print "jsGetCookie('$name');\n"
   print "</script>\n";
}