【问题标题】:PHP/Javascript Hybrid Cookie FunctionsPHP/Javascript 混合 Cookie 函数
【发布时间】:2015-12-08 20:33:49
【问题描述】:

我正在尝试为那些讨厌的 cookie 创建一个在 php 中混合 javascript 的函数。这是一个有效的方法;

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 问题。是的,我已经查看了其他相关解决方案。如果不是远程交付,这将不是问题。

感谢任何帮助。

【问题讨论】:

  • 你说你知道php是服务器端而javascript是客户端但是你试图通过生成javascript来获取php中的cookie。

标签: javascript php cookies


【解决方案1】:

你的打印 JS 代码删除 cookie 的函数有一行问题尝试改变这个:

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

进入这个:

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

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

但是由于$str 是空的并且没有做任何事情,你也可以这样做:

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

希望对您有所帮助。

【讨论】:

  • 我试图做的是将cookie的值返回给php变量$str,以便可以从php函数返回。
【解决方案2】:

这应该是注释,但有点长。

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

我不明白你的意思。 PHP 编写 html(以及 javascript、CSS、图像和....)。有一种机制可以在 HTTP 请求($_COOKIE)中发送 cookie,因此目标看起来很奇怪。还有其他方法可以将数据返回服务器端(在 POST 中,在 URL 查询中,作为 AJAX 请求中的自定义标头......)但不知道您要实现什么以及为什么不能使用正常的方法很难建议。

您的 PHP 函数似乎很混乱。很难推断您期望它做什么。

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

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

通过从 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";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多