0

JavaScript で記述された、PHP での Cookie の適切な読み取りに問題があります。具体的には、PHP が整数のみを読み取り、他のすべての文字を無視するという問題があります。たとえば、'firstName' を 'Bob' として保存し、'phoneNumber' を '555-1234' と表示すると、PHP は 'firstName' に 0 を、'phoneNumber' に '555' を表示します。

保存しているサンプルデータ (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 ページでは、cookie を表示する phpinfo() があります。_REQUEST["firstName"] と _COOKIE["firstName"] では "Bob" が返されますが、echo $_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>");
?>
4

1 に答える 1

2

問題は明らかにセッション データ自体にあるのではなく、PHP でデータを取得する方法にあります。

ここで見られる動作は、これらの文字列 ("Bob" と "555-1234") が int に変換されていることです。実際、PHP はこれらの文字列をhere で説明されているよう0にそれぞれ およびに変換します。555

特に:

値は文字列の最初の部分によって与えられます。文字列が有効な数値データで始まる場合、これが使用される値になります。それ以外の場合、値は 0 (ゼロ) になります。

int キャスト ( として定義(int)) または暗黙的な変換についてスクリプトを確認し、削除します。または、PHP コードを投稿して、確認させてください。

編集:

PHP コード+では、数値用に予約されている演算子を使用しています。したがって、int への暗黙的な変換につながります。.代わりに文字列連結に使用してください。

于 2013-03-07T22:54:31.090 に答える