2013-03-07 60 views
0

整数我在PHP中正确读取饼干,写在JavaScript代码的问题。具体来说,问题是PHP将只读取整数,并忽略所有其他字符。例如,如果我将'firstName'存储为'Bob','phoneNumber'显示为'555-1234',则PHP将为'firstName'显示0,'phoneNumber'显示为'555'。饼干只显示为PHP

即我存储(cookieName =值)实施例

数据

AreCookiesEnabled=344 
firstName=Bob 
lastName=Smith 
[email protected] 
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. 

这是JavaScript函数我使用写的Cookie:

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 [“名字”]和_COOKIE [“名字”]我得到“鲍勃”,但是当我回声$ _COOKIE [“名字”]我得到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] => [email protected] [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>"); 
?> 
+5

将有助于看你有没有输出这些Cookie的PHP代码,但我的第一直觉告诉你有一个'+'的地方在代码中,你应该有一个'.',这可能迫使字符串值的整数。 – 2013-03-07 22:48:23

+1

捎带上@ RossMcLellan的评论我会从你的输出猜你正在做的事情,如回声'“名字:” + _COOKIE $ ...' – 2013-03-07 22:49:46

+0

我用PHP文件 – pWEN 2013-03-07 22:55:06

回答

2

问题显然不是在会话数据本身,这是你如何得到它在PHP。

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

特别是:

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

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

编辑:

在你使用的是+运营商,这是留给数值PHP代码;因此导致隐式转换为int。改用字符串连接使用.

+0

更新你是对的!我忘了PHP使用一个。而不是+来连接字符串。愚蠢的n00b错误。谢谢! – pWEN 2013-03-07 22:58:18

+0

@pWEN,没问题,先生。 – Shoe 2013-03-07 23:03:26