2010-04-11 15 views

Respuesta

6

Simplemente obtenga las cookies de Set-Cookie param en los encabezados de respuesta y envíelas de vuelta con las solicitudes futuras. No debería ser difícil.

+12

Si no es difícil, ¿quizás podría proporcionar un fragmento de ejemplo en la respuesta? –

27

Respuesta corta: no. Y no es tan genial.

Implementé esto como parte de npm para poder descargar tarballs de github. Aquí está el código que hace que: https://github.com/isaacs/npm/blob/master/lib/utils/fetch.js#L96-100

var cookie = get(response.headers, "Set-Cookie") 
if (cookie) { 
    cookie = (cookie + "").split(";").shift() 
    set(opts.headers, "Cookie", cookie) 
} 

El archivo tiene un montón de cosas-NPM específica (log, ajuste, etc.) pero debe mostrar la idea general. Básicamente, estoy recopilando las cookies para poder enviarlas de nuevo en la próxima solicitud cuando me redirijan.

He hablado con Mikeal Rogers acerca de agregar este tipo de funcionalidad a su utilidad de "solicitud", completa con el soporte de un archivo cookiejar respaldado por el sistema de archivos, pero es realmente bastante complicado. Debe hacer un seguimiento de los dominios para enviar las cookies, y así sucesivamente.

Esto probablemente nunca se incluya en el nodo directamente, por esa razón. Pero cuidado con los desarrollos en el espacio de usuario.

EDITAR: Esto ahora es compatible por defecto en la Solicitud.

4

Si usted está buscando para hacer parte del cliente las cookies puede utilizar https://github.com/mikeal/request

M.

+1

Lo probé por "jar: true" como se describe en su documento, pero no funciona ... –

2

El código siguiente muestra el uso de cookies del lado del servidor, aquí hay un servidor de la API de demostración que analizan las cookies de un cliente HTTP y comprobar el hash de las cookies:

var express = require("express"), 
app  = express(), 
hbs = require('hbs'), 
mongoose = require('mongoose'), 
port = parseInt(process.env.PORT, 10) || 4568; 

app.configure(function() { 
app.use(express.bodyParser()); 
app.use(express.methodOverride()); 
app.use(express.static(__dirname + '/public_api')); 
app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
}); 
app.get('/api', function (req, res) { 
    var cookies = {}; 
    req.headers.cookie && req.headers.cookie.split(';').forEach(function(cookie) { 
     var parts = cookie.split('='); 
     cookies[ parts[ 0 ].trim() ] = (parts[ 1 ] || '').trim(); 
    }); 
    if (!cookies['testcookie']) { 
     console.log('First request'); 
     res.cookie('testcookie','testvaluecookie',{ maxAge: 900000, httpOnly: true }); 
     res.end('FirstRequest'); 
    } else { 
     console.log(cookies['testcookie']); 
     res.end(cookies['testcookie']); 
    } 
}); 

app.listen(port); 

en el lado del cliente, simplemente hacer una petición normal a la API del servidor anterior, estoy usando el módulo de petición, que por defecto las transferencias de galletas para cada solicitud.

request(options, function(err, response, body) {  
    console.log(util.inspect(response.headers)); 
    res.render("index.html", {layout: false,user: { 
     username: req.session.user + body 
    }}); 
}); 
2

Una solución completa de funciones para las galletas

las soluciones de fabricación propia que se proponen en las otras respuestas aquí no cubren una gran cantidad de casos especiales, pueden romperse fácilmente y carecen de una gran cantidad de características estándar, tales como persistencia

Como mentioned by isaacs, el módulo request ahora tiene compatibilidad con cookies. They provide examples with cookies on their Github page. Los ejemplos explican cómo habilitar el soporte de cookies agregando un "tough-cookie" cookie jar a su solicitud.

NOTA: Un bote de galletas contiene y lo ayuda a administrar sus cookies.

Para citar sus Readme (a partir de abril de 2015):

cookies son desactivados por defecto (lo demás, que serían utilizadas en solicitudes posteriores). Para habilitar las cookies, configure jar en true (ya sea en valores predeterminados u opciones) e instale tough-cookie.

La administración de cookies se proporciona a través del tough-cookie module. Es una herramienta de gestión de cookies estable, más bien completa, que implementa el "HTTP State Management Mechanism" - RFC 6265. Incluso ofrece una variedad de opciones para conservar (almacenar) las cookies, usando un cookie store.

Cuestiones relacionadas