2010-08-03 68 views
2

讀書我一直在使用設置我的cookie在PHP中的以下內容:使用PHP創建一個Cookie,但有困難的javascript

setcookie("id", 100, time()+100000, "/AP", "www.mydomain.com", 0, true); 

當我看到存儲在瀏覽器的cookie,它看起來像這樣:

Name: id 
Content: 100 
Domain: .www.mydomain.com 
Path: /AP 

注意。在域

當我設置一個cookie在javascript我除了得到相同的結果:

Name: id 
Content: 100 
Domain: www.mydomain.com 
Path: /AP 

域名是不同的。爲什麼我的PHP cookie放一個'。'在www.mydomain.com和JavaScript前面沒有。

下面是我用來創建一個cookie的javascript代碼:

  function SetCookie(cookieName,cookieValue,nDays) { 
      var today = new Date(); 
      var expire = new Date(); 
      if (nDays==null || nDays==0) nDays=1; 
      expire.setTime(today.getTime() + 3600000*24*nDays); 
      document.cookie = cookieName+"="+escape(cookieValue) 
          + ";expires="+expire.toGMTString(); 
     } 

任何想法?

更新:

當我嘗試使用這個在JavaScript中下面的函數爲:

  function ReadCookie(cookieName) { 
      var theCookie=""+document.cookie; 
      var ind=theCookie.indexOf(cookieName); 
      if (ind==-1 || cookieName=="") return ""; 
      var ind1=theCookie.indexOf(';',ind); 
      if (ind1==-1) ind1=theCookie.length; 
      return unescape(theCookie.substring(ind+cookieName.length+1,ind1)); 
     } 

使用Cookie中的ReadCookie功能(或以上)我不能得到的值包含:

Domain: .www.mydomain.com 

但是該cookie包含:

Domain: www.mydomain.com 

工作得很好。

+0

這個問題的標題意味着你很難閱讀cookie,但問題本身並沒有提到這個......情況是怎樣的 - 你實際上閱讀cookie有困難嗎? – thomasrutter 2010-08-03 03:54:19

+0

@thomasrutter - 對不起,我完全忘了添加那部分。我已經更新了這個問題以包含ReadCookie函數和其他相關信息。 – webdad3 2010-08-03 03:58:30

+1

您只是將cookie設置爲僅用於http,意味着javascript無法與之交互。刪除'setcookie'的最後一個參數或將其設置爲'false',您應該可以使用javascript訪問它。 – munch 2010-08-03 04:18:14

回答

4

因此,有同樣問題的人可以很容易地在未來找到答案。以下是我對答案的評論:

您正在設置Cookie爲httponly,這意味着javascript無法與其進行交互。刪除setcookie的最後一個參數或將其設置爲false,您應該可以使用javascript訪問它。

setcookie("id", 100, time()+100000, "/AP", "www.mydomain.com", false, false); 

很高興能幫到你!

0

域名爲.www.mydomain.com的cookie不僅發送到www.mydomain.com,還發送到subdomain.www.domain.com,sub.subdomain.www.domain.com等。

但是,我不能重現你所提到的行爲:

a.php只會

<?php 
setcookie("id", 100, time()+100000, "/AP", "www.mydomain.com", 0, true); 

HTTP請求:

 
GET /a HTTP/1.1 
Host: localhost:81 
  
HTTP/1.1 200 OK 
Date: Tue, 03 Aug 2010 03:49:59 GMT 
Server: Apache/2.2.13 (Win32) PHP/5.3.0 
X-Powered-By: PHP/5.3.0 
Set-Cookie: id=100; expires=Wed, 04-Aug-2010 07:36:41 GMT; path=/AP; domain=www.mydomain.com; httponly 
Content-Length: 0 
Content-Type: text/html 
0

爲什麼我的PHP的cookie放一個 '。'在www.mydomain.com和JavaScript前面沒有。

PHP的可能是出於兼容性的原因。這在PHP版本中可能會有所不同。

前面的小點表示不應該僅將Cookie分配給指定的主機名,還應將其分配給該主機名下的任何子域。

因此,設置爲.www.example.com的cookie應該可以在www.example.comsite1.www.example.com上工作。

0

我會回答這個問題,所以我可以標記一個答案,但是信用評級:munch。如果他提出了這個問題的答案,我會刪除它並使用他的答案。請不要「起來」投我的答案。請在我的原始問題下「投」他的評論。

答案是munch了:

@Jeff五:你是設置cookie的只有HTTP,這意味着JavaScript不能與它進行交互。刪除setcookie的最後一個參數或將其設置爲false,並且您應該可以使用javascript訪問它。

我馬上試過,低下,看它的工作!在病房之後,我想知道他在說什麼。所以我去了:http://php.net/manual/en/function.setcookie.php找出這個HTTP參數是關於什麼。

的HttpOnly

爲TRUE時,cookie將僅通過HTTP 協議進行 訪問。這意味着Cookie 將不能通過腳本 語言(如JavaScript)訪問。這個 設置可以有效地幫助減少 通過XSS攻擊的身份盜用 (儘管它不被所有的 瀏覽器支持)。在PHP 5.2.0中添加。 TRUE或 FALSE

munch是絕對正確的。在閱讀本文時請注意他的評論。