2012-06-10 5 views
30

Express 및 SocketIO를 사용하는 노드 응용 프로그램에서 작업하고 있습니다. 내 익스프레스 컨트롤러에서 내 클라이언트 측 자바 스크립트 코드에서 액세스 할 수있는 쿠키를 설정하고 싶습니다. 내가 시도한 모든 것이 작동하지 않는 것 같습니다.Express에서 클라이언트 측 액세스 가능 쿠키 설정

res.setHeader('Set-Cookie','test=value'); 
res.cookie('rememberme', 'yes', { maxAge: 900000 }); 

내가 여기에 뭔가가 있습니까? 미리 감사드립니다!

+0

가 클라이언트 측 코드를 보여주기 위해 도움이 될 수 있습니다. – ebohlman

+0

저는 Chrome 관리자에게 가서 쿠키를보고 있습니다. 아무것도 보이지는 않지만 ... – dshipper

답변

48

알아 냈어! 기본적으로 Express는 옵션 httpOnly를 true로 설정합니다. 즉, 쿠키는 클라이언트 측 Javascript에서 액세스 할 수 없습니다. 위해서는 제대로 단지 같은 조각을 사용하는 클라이언트에 접근 쿠키를 설정하려면 다음

res.cookie('rememberme', 'yes', { maxAge: 900000, httpOnly: false}); 

은 또한 당신이 res.redirect를 호출 한 후이 명령을 호출하는 경우, 쿠키가 설정되지 않습니다 것으로 나타났습니다 . 이 명령을 실행하려면 res.render가 따라야합니다. 이것이 왜 있는지.

+0

좋은 정보입니다. 언제든지 익스프레스 프레임 워크에서 서버 측의 클라이언트 측 쿠키에 액세스하는 방법을 알고 있습니까? – user644745

+5

@ user644745 당신은'res.cookies' 객체를보고 Express에서 쿠키를 읽을 수 있습니다. 예를 들어'session_id'라는 이름의 쿠키는'res.cookies.session_id'에 존재합니다. http://expressjs.com/api.html#req.cookies – frontendbeauty

+1

res.render 또는 res.send를 호출해야하는 이유는 쿠키를 설정해도 응답이 시작되지 않기 때문입니다. 보내기 및 렌더링하기. 이 쿠키 메서드는 응답 개체에 쿠키를 추가하기 만합니다. –

3

사실 저는 두 시간 동안 동일한 문제를 경험했습니다. '[I는 응답 헤더에서 Set-쿠키 명령을 볼 수 있습니다

res.cookie("mycookie", "1234567890", { secure:true, maxAge:120000, httpOnly: true }); 

하지만 크롬에서 나는 쿠키를 찾을 수 없습니다 내가 req.cookies하여 쿠키를 찾을 수 없습니다 : 여기

내 코드입니다 mycookie '].

이 문제의 근본 원인은 HTTPS 연결을 사용하지 않았기 때문입니다. Simple Steps to Secure Your Express Node App

나는 사실, 다음 브라우저가 어떤 HTTP 요청에서 내 쿠키를 전송하지 않습니다 = 옵션 보안 설정하면되지만 HTTPS 보안 연결 :이 문서에 따르면 (쿠키 파서 미들웨어 익스프레스 4.x의)

. 그런 다음 secure : true 옵션을 제거한 후 쿠키 작동이 나타납니다.

0

때문에 HTTP에 액세스 우리가 사용할 수 있습니다

res.cookie("mycookie", "1234567890", { secure:false, maxAge:120000, httpOnly: true });? 
관련 문제