2017-10-21 3 views
0

NodeJS를 사용하여 응용 프로그램 단일 페이지를 만들고 쿠키 세션 (쿠키 세션 npm)을 사용하여 사용자가 로그인했는지 여부를 확인하려고합니다. 내 노드 서버 측에서 세션 쿠키를 가져오고 설정할 수 있지만 클라이언트 측에서 가져 오는 방법을 알지 못합니다.클라이언트 측에서 쿠키 세션에 액세스하려면 어떻게해야합니까?

이것은 내 서버 측에서 설정하고 방법입니다

req.session.user_id = user[0]._id; 

user[0]._id 내가 내 MongoDB의에서 얻을 내 사용자 ID입니다.

답변

4

그럼이 같은 cookie-session 뭔가를 구성했다고 가정하자

req.session.user_id = 123; 

브라우저의 개발 도구를 보면 당신은거야 참조 2 개 쿠키 설정 :

express:sess = eyJ1c2VyX2lkIjoxMjN9 
express:sess.sig = 01I_Rx2gACezZI1tdl2-NvxPq6w 

쿠키 express:sess은 base64로 인코딩됩니다. 디코딩하면 {"user_id":123}이됩니다. 세션 데이터가 쿠키 자체에 저장된다는 것을 알아 두는 것이 중요합니다. 이는 세션의 ID가 아닙니다.

다른 쿠키 express:sess.sig은 서명입니다. 이 서명은 키 (이 예에서는 secret)를 사용하여 생성되며 변조를 방지하는 데 사용됩니다. 누구나 쉽게 express:sess을 수정할 수 있지만 해당하는 express:sess.sig도 생성 할 수있는 경우가 아니라면 서버가 변경되었음을 알 수 있습니다.

모든 말씀 드리지만, express-session 미들웨어를 살펴 보시기 바랍니다. 또한 쿠키를 사용하지만 세션 ID를 저장하기 위해 쿠키 만 사용합니다. 모든 데이터가 서버에 저장되는 쿠키에는 저장되지 않습니다. 이것은 대부분의 다른 웹 프레임 워크에서 세션이 작동하는 방식과 훨씬 비슷하지만 어느 방법이 사용자의 요구에 가장 적합한 지 분명히 말할 수는 없습니다.

어느 방법 으로든 쿠키를 사용하면 기본적으로 httponly으로 설정됩니다. 브라우저의 개발 도구에서이를 확인할 수 있습니다. 이는 HTTP 요청에 포함되었지만 클라이언트 측 JavaScript를 통해 액세스 할 수 없음을 의미합니다. 이는 악성 코드가 쿠키를 훔치기 어렵도록하기위한 보안 수단입니다. 당신은 사용 cookie-session이 보안 기능을 해제 할 수 있습니다 :

app.use(cookieSession({ 
    httpOnly: false, 
    keys: ['secret'] 
})); 

당신은 다음 document.cookie를 사용하는 쿠키를 액세스 할 수 있습니다.

본인은 보안 조치라고 반복하고 권장하지 않습니다. 이것이 귀하의 신청서에 진정한 관심사인지 여부를 판단하는 것은 불가능합니다.

실제로 쿠키의 값을 구문 분석할지 또는 쿠키의 존재 여부 만 확인할지 여부는 분명하지 않습니다. 구문 분석이 필요한 경우 관련 쿠키 값을 base64로 디코딩 한 다음 JSON 디코드해야합니다.

쿠키를 유지하기 위해 선택할 수있는 다양한 방법이 있습니다. httponly. 이 정보로 무엇을 할 것인지에 대해 더 많이 알지 못하면 구체적으로하기가 어렵습니다. Express보기 (예 : 템플릿 렌더링)를 사용하는 경우 템플릿에서 모든 작업을 수행 할 수 있습니다. SPA 지역에 있다면 관련 정보를 수집하기 위해 AJAX 요청을 사용할 수 있습니다. 한 마디로 세션 쿠키를 안전하게 유지하면서 필요한 정보를 제공하기 위해 다른 쿠키를 사용할 수도 있습니다.

0

세션은 클라이언트 측에서 액세스 할 수 없습니다. 쿠키를 의미하는 경우 쿠키는 세션에 대한 정보를 포함하지 않지만 ID는이를 가리 킵니다. 클라이언트 측 세션에서 정보를 얻으려면 요청을 만들어야하고 서버가 세션 정보를 다시 보냅니다.

var cookieSession = require('cookie-session'); 

app.use(cookieSession({ 
    keys: ['secret'] 
})); 

은 그럼 세션에서 일부 데이터를 저장할 수 :

+0

그는 세션 데이터를 decyphers/cyphers하고 클라이언트 장치에 저장하는 '쿠키 세션'패키지에 대해 이야기하고 있습니다. – num8er

관련 문제