【问题标题】:Cookies written in JavaScript only display as integers in PHP用 JavaScript 编写的 Cookie 在 PHP 中仅显示为整数
【发布时间】:2013-03-07 22:45:40
【问题描述】:

我在正确读取用 JavaScript 编写的 PHP cookie 时遇到问题。具体来说,问题在于 PHP 将只读取整数,而忽略所有其他字符。例如,如果我将 'firstName' 存储为 'Bob',而 'phoneNumber' 显示为 '555-1234',PHP 将显示 0 代表 'firstName' 和 '555' 代表 'phoneNumber'。

我存储的示例数据 (cookieName=value)

AreCookiesEnabled=344
firstName=Bob
lastName=Smith
email=bsmith@email.com
hpID=PL7H88
company=Bobcorp
phoneNumber=555-1234
language=en
os=Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CMNTDF; BRI/1; .NET4.0C; .NET4.0E)
browser=5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CMNTDF; BRI/1; .NET4.0C; .NET4.0E)
description=This is a description.

这是我用来编写 cookie 的 JavaScript 函数:

function SetCookie(cookieName, cookieValue, nDays)
{
    //alert("SetCookie("+cookieName+", "+cookieValue+", "+nDays+")");
    var today = new Date();
    var expire = new Date();
    if (nDays==null || nDays==0)
    {
        nDays=1;
    }

    if(cookieValue == '')
    {
        cookieValue = 'none';
    }

    expire.setTime(today.getTime() + 3600000*24*nDays);
    document.cookie = cookieName+"="+escape(cookieValue)+";expires="+expire.toGMTString()+";domain=.ourdomain.com;path=/";
}//

在 PHP 页面上,我有 phpinfo() 显示 cookie。对于 _REQUEST["firstName"] 和 _COOKIE["firstName"] 我得到 "Bob",但是当我回显 $_COOKIE["firstName"] 时我得到 0。事实上,使用上面的示例信息,我得到这个输出:

Are cookies enabled: 108
First Name: 0
Last Name: 0
Email: 0
HP ID: 0
Company: 0
Phone Number: 555
Language: 0
Operating System: 0
Browser: 5
Description: 0

我也做 print_r($_COOKIE);并得到这个输出:

Array ( [testsession] => true [firstName] => Bob [lastName] => Smith [email] => bsmith@email.com [hpID] => PL7H88 [company] => Bobcorp [phoneNumber] => 555-1234 [language] => en [AreCookiesEnabled] => 108 [description] => This is a description. [browser] => 5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CMNTDF; BRI/1; .NET4.0C; .NET4.0E) [os] => Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CMNTDF; BRI/1; .NET4.0C; .NET4.0E) ) 

似乎一切都在那里并且正确,除了最终输出。谁能告诉我我在这里做错了什么?谢谢。

编辑:根据大众需求,这是 PHP 文件...

<?php
phpinfo();
phpversion();
print_r($_COOKIE);

echo("<p>An error has occurred.</p>");
echo("<p><b>Are cookies enabled:</b> ");
echo($_COOKIE['AreCookiesEnabled']+"<br /></p>");
echo("<p><b>First Name:</b> ");
echo($_COOKIE['firstName']+"<br /></p>");
echo("<p><b>Last Name:</b> ");
echo($_COOKIE['lastName']+"<br /></p>");
echo("<p><b>Email:</b> ");
echo($_COOKIE['email']+"<br /></p>");
echo("<p><b>HP ID:</b> ");
echo($_COOKIE['hpID']+"<br /></p>");
echo("<p><b>Company:</b> ");
echo($_COOKIE['company']+"<br /></p>");
echo("<p><b>Phone Number:</b> ");
echo($_COOKIE['phoneNumber']+"<br /></p>");
echo("<p><b>Language:</b> ");
echo($_COOKIE['language']+"<br /><br /></p>");
echo("<p><b>Operating System:</b> ");
echo($_COOKIE['os']+"<br /></p>");
echo("<p><b>Browser:</b> ");
echo($_COOKIE['browser']+"<br /><br /></p>");
echo("<p><b>Description:</b> <br /><br />");
echo($_COOKIE['description']+"</p>");
?>

【问题讨论】:

  • 将有助于查看您必须输出这些 cookie 的 PHP 代码,但我的第一直觉说您在代码中应该有一个 . 的某个地方有一个 +,这可能是强制的将字符串值转换为整数。
  • 捎带@RossMcLellan 的评论我猜从你的输出中你正在做类似echo "First Name: " + $_COOKIE...的事情
  • 我已经更新了 PHP 文件

标签: php javascript cookies


【解决方案1】:

问题显然不在于会话数据本身,而在于您在 PHP 中获取它的方式。

我在这里看到的行为是这些字符串(“Bob”和“555-1234”)正在转换为 int。 PHP 实际上将这些字符串分别转换为0555,如here 所述。

特别是:

该值由字符串的初始部分给出。如果字符串 以有效的数字数据开头,这将是使用的值。 否则,该值为 0(零)。

检查您的脚本是否有 int 转换(定义为 (int))或任何隐式转换并将其删除。或者发布你的 PHP 代码,让我检查一下。

编辑:

在您的 PHP 代码中,您使用的是 + 运算符,它是为数值保留的;因此导致隐式转换为 int。请改用. 进行字符串连接。

【讨论】:

  • 你是对的!我忘记了 PHP 使用 .而不是 + 来连接字符串。愚蠢的 n00b 错误。谢谢!
猜你喜欢
  • 2012-09-05
  • 2016-03-12
  • 1970-01-01
  • 2011-03-13
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多