Nodejs 와 Session 원리 및 실전 기술 소결

7655 단어 nodejssession

쿠키
HTTP 프로 토 콜 은 상태 가 없 지만 사용자 가 로그 인 한 후 사 이 트 를 다시 방문 할 때 사용자 가 로그 인 했 는 지 여 부 를 판단 할 수 없 는 경우 가 많 기 때문이다.그래서 cookies 가 생 겼 습 니 다.브 라 우 저 에서 사용자 데 이 터 를 저장 하 는 데 사 용 됩 니 다.다음 과 같은 특징 이 있 습 니 다.
1.클 라 이언 트 브 라 우 저 에 만 있 는 것 입 니 다.
2.정 보 를 기록 하 는 데 사용 되 며 크기 는 최대 4K 바이트 입 니 다.
3.cookies 를 사용 하면 이 도 메 인 이름 에 대한 모든 방문 은 cookies 를 가 져 옵 니 다.
현재 신형 사 이 트 는 브 라 우 저 캐 시 를 더 많이 사용 하고 있 습 니 다.쿠키 는 서버 에 요청 을 할 때마다 쿠키 를 가 져 옵 니 다.정적 사진 이 든 아니 든 간 에.
쿠키 예:

세 션
session 은 서버 쪽 의 쿠키 와 유사 하 며 서버 쪽 에 저장 되 며 서버 캐 시 와 유사 합 니 다.사용자 가 로그 인 했 을 때 인증 이 필요 하 겠 죠?그러면 session 에서 검증 하면 됩 니 다.session 과 쿠키 는 일일이 대응 하 는 관계 입 니 다.
session 생 성 순서
전역 유일한 식별 자 생 성(sessionid);
데이터 저장 공간 을 개척 하 다.일반적으로 메모리 에 해당 하 는 데이터 구 조 를 만 들 지만 이런 상황 에서 시스템 이 전기 가 떨 어 지면 모든 세 션 데 이 터 를 잃 어 버 리 고 전자상거래 사이트 라면 이런 사 고 는 심각 한 결 과 를 초래 할 수 있다.그러나 파일 에 심지어 데이터베이스 에 저장 할 수도 있다.그러면 I/O 비용 이 증가 하지만 session 은 어느 정도 지속 화 되 고 session 의 공유 에 유리 하 다.
세 션 의 전역 유일한 표시 자 를 클 라 이언 트 에 보 냅 니 다.
문 제 는 서버 에서 이 session 의 유일한 표 지 를 어떻게 보 내 느 냐 하 는 것 이다.HTTP 프로 토 콜 에 연결 하면 데 이 터 는 요청 줄,헤드 필드 또는 Body 에 넣 을 수 있 습 니 다.이 를 바탕 으로 일반적으로 쿠키 와 URL 재 작성 두 가지 방법 이 있 습 니 다.
3 세트 쿠키
쿠키 는 어떻게 설정 되 어 있 나 요?서버 에 되 돌아 오 라 는 요청 으로 설정 되 었 습 니 다.

서버 는 set-cookie 의 메 시 지 를 되 돌려 주 고 브 라 우 저 에 쿠키 를 설정 하 라 고 알 립 니 다.그래서 브 라 우 저 는 set-cookie 의 필드 에 따라 정 보 를 설정 합 니 다.예 를 들 어 위의 정보 가 설정 되 어 있 습 니 다[email protected]
4 실전
저 희 는client-session(express-session 은 기본적으로 똑 같 습 니 다)를 예 로 들 어 프로젝트 에 session 을 설정 합 니 다.
1 설치 모듈

var session = require('client-sessions');
2 세 션 설정

app.use(session({
 cookieName: 'session',
 secret: 'random_string_goes_here',
 duration: 30 * 60 * 1000,
 activeDuration: 5 * 60 * 1000,
}));
1)secret:클 라 이언 트 의 데이터 가 안전 하지 않 기 때문에 암호 화 를 해 야 합 니 다.
2)duration:session 의 만 료 시간,만 료 되면 다시 설정 해 야 합 니 다.
3)active Duration:활성화 시간,예 를 들 어 30 분 으로 설정 하면 30 분 안에 사용자 가 서버 의 상호작용 을 하면 다시 활성 화 됩 니 다.
다섯 째,Session 에 사용자 정보 저장

app.post('/login', function(req, res) {
 User.findOne({ email: req.body.email }, function(err, user) {
  if (!user) {
   res.render('login.jade', { error: 'Invalid email or password.' });
  } else {
   if (req.body.password === user.password) {
    
    // sets a cookie with the user's info
    req.session.user = user;
    //       ,  set session,    sessionid,       set   cookie  
    
    res.redirect('/dashboard');
   } else {
    res.render('login.jade', { error: 'Invalid email or password.' });
   }
  }
 });
});
6 세 션 층 중간 부품
우 리 는 당연히 모든 요청 에 이 단락 을 추가 하 는 것 을 원 하지 않 기 때문에 express 를 사용 하여 전역 설정 을 합 니 다.

app.use(function(req, res, next) {
 if (req.session && req.session.user) {
  User.findOne({ email: req.session.user.email }, function(err, user) {
   if (user) {
    req.user = user;
    delete req.user.password; // delete the password from the session
    req.session.user = user; //refresh the session value
    res.locals.user = user;
   }
   // finishing processing the middleware and run the route
   next();
  });
 } else {
  next();
 }
});
만약 사용자 논리 가 로그 인하 지 않 았 을 때 로그 인해 야 한다 면,우 리 는 계속 경 로 를 추가 할 수 있 습 니 다.

function requireLogin (req, res, next) {
 if (!req.user) {
  res.redirect('/login');
 } else {
  next();
 }
};
app.get('/dashboard', requireLogin, function(req, res) {
 res.render('dashboard.jade');
});
7 안전성
1.우 리 는 로그 인 할 때 session 을 리 셋 할 수 있 습 니 다.

app.get('/logout', function(req, res) {
 req.session.reset();
 res.redirect('/');
});
안전성 도 더 할 수 있어 요.
httpOnly:쿠키 는 http 로 만 접근 할 수 있 고 js 로 읽 을 수 없습니다.
secure:https 강제 사용
ephemeral:브 라 우 저 를 닫 을 때 쿠키 를 동시에 닫 습 니 다.
8 총화
Cookie 와 session 은 실현 수단 이 다 르 기 때문에 장단 점 과 각자 의 응용 장면 도 있다.
응용 장면
Cookie 의 전형 적 인 응용 장면 은 Remember Me 서비스 이다.즉,사용자 의 계 정 정 정 보 는 쿠키 형식 으로 클 라 이언 트 에 저장 되 고 사용자 가 일치 하 는 URL 을 다시 요청 할 때 계 정 정 정 보 는 서버 로 전송 되 며 해당 프로그램 에 의 해 자동 로그 인 등 기능 을 수행 하 게 된다.물론 페이지 레이아웃 과 검색 기록 등 클 라 이언 트 정 보 를 저장 할 수 있 습 니 다.
Session 의 전형 적 인 응용 장면 은 사용자 가 특정한 사이트 에 로그 인 한 후에 로그 인 정 보 를 session 에 넣 고 앞으로 의 모든 요청 에서 해당 하 는 로그 인 정 보 를 조회 하여 해당 사용자 의 합 법 성 을 확보 하 는 것 이다.물론 카 트 등 전형 적 인 장면 도 있다.
안전성
쿠키 는 정 보 를 클 라 이언 트 에 저장 합 니 다.암호 화 를 하지 않 으 면 일부 프라이버시 정보 가 노출 되 고 안전성 이 떨 어 집 니 다.일반적인 상황 에서 민감 한 정 보 는 암호 화 를 거 쳐 쿠키 에 저장 되 지만 쉽게 도 둑 맞 을 수 있 습 니 다.세 션 은 서버 에 만 정 보 를 저장 합 니 다.파일 이나 데이터 베이스 에 저장 하면 도 둑 맞 을 수도 있 습 니 다.다만 쿠키 보다 가능성 이 너무 적 습 니 다.
Session 안전성 에 있어 서 두 드 러 진 것 은 세 션 납치 문제 가 존재 한 다 는 것 입 니 다.이것 은 안전 위협 입 니 다.이 는 다음 글 에서 더욱 상세 하 게 설명 하 겠 습 니 다.전체적으로 보면 session 의 안전성 은 쿠키 보다 높다.
성능
쿠키 는 클 라 이언 트 에 저장 되 며 클 라 이언 트 의 I/O 와 메모 리 를 소모 하고 session 은 서버 에 저장 되 며 서버 의 자원 을 소모 합 니 다.그러나 session 은 서버 에 대한 압력 이 비교적 집중 되 고 쿠키 는 자원 소 모 를 잘 분산 시 켰 다.이런 점 에서 쿠키 는 session 보다 우수 하 다.
실효 성
Cookie 는 유효기간 을 설정 하여 클 라 이언 트 에 장시간 메모 리 를 저장 할 수 있 으 며,session 은 일반적으로 비교적 짧 은 유효기간 만 있 습 니 다(사용자 가 자발적으로 session 을 소각 하거나 브 라 우 저 를 닫 으 면 시간 초과 가 발생 합 니 다).
기타
쿠키 의 처 리 는 개발 에 있어 서 session 이 편리 하지 않 습 니 다.또한 쿠키 는 클 라 이언 트 에 수량 과 크기 의 제한 이 있 지만 session 의 크기 는 하드웨어 만 제한 하고 저장 할 수 있 는 데이터 가 너무 많다.
완전한 로그 인 을 어떻게 하 는 지 에 대해 계속 보충 하 세 요.
사용자 측
일반적으로 https 를 사용 해 야 하 며 비밀 번 호 는 네트워크 에 명문 으로 전송 되 어 서 는 안 되 므 로 서버 로 전송 할 때 먼저 암호 화 되 어야 합 니 다.흔히 볼 수 있 는 md5 이지 만 md5 가 풀 리 기 때문에 SHA 512 로 SHA 256(password)을 암호 화 할 수 있 습 니 다.
2 서버
서버 에 서 는 비밀 번 호 를 다시 암호 화해 야 합 니 다.모든 클 라 이언 트 의 물건 이 안전 하지 않 기 때문에 만약 에 네트워크 가 감청 된다 면 SHA 512(username+SHA 512(password)+sault)의 암호 화 를 진행 할 것 입 니 다.이곳 의 sault 는 랜 덤 수 입 니 다.라 이브 러 리 에서 벗 어 나 비밀 번 호 를 알 아 맞 히 는 것 을 방지 하기 때문에 랜 덤 수 를 추가 해 야 합 니 다.이 sault 는 라 이브 러 리 에 저장 되 어 있 기 때문에 다른 데이터베이스 에 저장 하 는 것 이 좋 습 니 다.
총결산
위 에서 말 한 것 은 편집장 님 께 서 소개 해 주신 Nodejs 와 Session 의 원리 와 실전 기술 의 소결 입 니 다.여러분 께 도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기