2016-03-24 17 views
1

Ich bin neu bei Node js; Ich verstehe, wie man Cookie mit Node bekommt und setzt. Ich verwende Visual Studio und verwende den eingebetteten IIS Express, der automatisch erstellt wird. Es ist der Server-Code auf meinem server.js:Konnte nicht gesetzt werden mit Knoten js

var express = require('express'); 
var cookieParser = require('cookie-parser') 

var app = express(); 
app.use(cookieParser()) 

app.use(function (req, res, next) { 
    res.setHeader('Access-Control-Allow-Origin', 'http://localhost:61342'); 
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); 
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type'); 
    res.setHeader('Access-Control-Allow-Credentials', true); 
    next(); 
}); 

app.get('/setCookie/:param', function (req, res) { 
    res.cookie('testCookie', req.params.param); 
    console.log('cookie created!'); 
    res.send(); 
}); 

var server = app.listen(8001, 'localhost', function() { 
    var host = server.address().address 
    var port = server.address().port 
    console.log("Server listening at http://%s:%s", host, port) 
}); 

Und dies ist der Client-Code:

function server() { 
     xmlhttp = new XMLHttpRequest(); 
     xmlhttp.open("GET", "http://localhost:8001/setCookie/cookie1", true); 
     xmlhttp.onreadystatechange = function() { 
      if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
       alert("ok"); 
      } 
     } 
     xmlhttp.send(); 
} 

ich diese funcion rufen, wenn ich auf einem Knopf klicken (nur zum Testen). Ich stelle fest, dass, wenn ich localhost: 8001/getCookie/cookie1 es richtig gesetzt Cookie (ich kann es auf der Browser-Konsole zu sehen, document.cookie eingeben), aber wenn ich mein Projekt auf localhost: 61342/und ich klicken Sie auf die Schaltfläche, die den Funktionsserver() aufrufen, erhalte ich diese Antwort:

Request URL:http://localhost:8001/setCookie/cookie1 
Request Method:GET 
Status Code:200 OK 
Remote Address:127.0.0.1:8001 

Access-Control-Allow-Credentials:true 
Access-Control-Allow-Headers:X-Requested-With,content-type 
Access-Control-Allow-Methods:GET, POST, OPTIONS, PUT, PATCH, DELETE 
Access-Control-Allow-Origin:http://localhost:61342 
Connection:keep-alive 
Set-Cookie:testCookie=cookie1; Path=/ 

aber wenn ich auf Browser-Konsole document.cookie tippe ich sehe nichts. Irgendeine Idee, wie kann ich das lösen? Vielen Dank für die Geduld

Antwort

0

Es gibt zwei separate Probleme hier.

Erstens:

document.cookie zeigt die Cookies auf die Herkunft des Dokuments gehör. Herkunftsländerübergreifende Ajax-Anfragen senden und speichern Cookies für den Ursprung, an den sie die Anfrage stellen. Da das eine andere Herkunft ist, werden sie nicht in document.cookie angezeigt. Um sie zu überprüfen, müssen Sie eine Anfrage an den Ursprung senden, zu dem sie gehören, und sie auf der Registerkarte Netzwerk überprüfen.

Zweitens:

Cross-Origin-Anforderungen unterstützen keine Cookies standardmäßig. Sie müssen zuerst set withCredentials bis true.

Verwandte Themen