2012-10-19 19 views
5

Ich habe ein Projekt, das eine REST API verwendet. Wenn sie eine Login-Anfrage senden, senden sie mir die Antwort als JSON, die einige Daten enthält. Zusammen mit, dass in -AntwortheadersjQuery AJAX Antwort Set Cookie Header

Access-Control-Allow-Origin:* 
Connection:keep-alive 
Content-Length:239 
Content-Type:application/json 
Date:Fri, 19 Oct 2012 06:28:12 GMT 
Server:Apache/2.2.22 (Amazon) 
Set-Cookie:session=username; Path=/ 

Hier haben wir ein Set-Cookie, aber die Cookie Einstellung nicht. Ich muss diesen Cookie setzen, denn für jeden anderen API-Zugriff wird der Server nach diesem Cookie suchen.

Wie kann ich dieses Problem beheben? Was ist die Lösung für die jQuery AJAX Antwort-Header-Set-Cookie-Methode?

+0

Wo Sie diese Anforderung zu machen? –

Antwort

6

Sie können Header von XMLHTTPRequest abrufen. Dies kann helfen. Lassen Sie mich wissen, ob das funktioniert.

$.ajax({ 
    type: 'POST', 
    url:'url.do', 
    data: formData, 
    success: function(data, textStatus, XMLHttpRequest){ 
     var cookietoSet=XMLHttpRequest.getResponseHeader('Set-Cookie'); 

     Set_Cookie(cookietoSet.split('=')[0],cookietoSet.split('=')[1],expires, path, domain, secure)//change as per ur needs 
    } 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     alert(XMLHttpRequest.getResponseHeader('some_header')); 
    } 
    }); 




function Set_Cookie(name, value, expires, path, domain, secure) 
{ 
// set time, it's in milliseconds 
var today = new Date(); 
today.setTime(today.getTime()); 

/* 
if the expires variable is set, make the correct 
expires time, the current script below will set 
it for x number of days, to make it for hours, 
delete * 24, for minutes, delete * 60 * 24 
*/ 
if (expires) 
{ 
expires = expires * 1000 * 60 * 60 * 24; 
} 
var expires_date = new Date(today.getTime() + (expires)); 

document.cookie = name + "=" +escape(value) + 
((expires) ? ";expires=" + expires_date.toGMTString() : "") + 
((path) ? ";path=" + path : "") + 
((domain) ? ";domain=" + domain : "") + 
((secure) ? ";secure" : ""); 
} 
+0

Dieser Code Cookie für meinen lokalen Server festgelegt wird. Aber mein Problem ist, dass ich es brauche einstellen für den API-Server. Cookie stellt keine Domain-Namen. –

+0

Ich bin immer noch nicht klar .. Dieser Code wird Cookie von Ihrem Web-Server in Ihrem Browser setzen – thecodejack

2

denke ich das eigentliche Problem hier ist, dass, wenn Sie Ihren Browser die Privatsphäre/Cookie-Einstellungen festgelegt haben, dann können einige Browser paranoid (mindestens FF & IE) scheinen XHR basierte Set-Cookie-Header zu ignorieren.

Hier ist ein Link zu einigen FF-Hilfe, die für Ihre Benutzer nützlich sein können. http://support.mozilla.org/en-US/kb/fix-login-issues-on-websites-require-passwords

Ich wünschte, es gäbe eine bessere Antwort/Abhilfe für dieses 8 (