ExpressJS에서 세션을 종료하는 방법


88

문서 어딘가에 묻혀 야한다고 생각하지만 찾을 수 없습니다.

ExpressJS에서 세션을 어떻게 닫거나 종료하거나 종료합니까?

답변:


121

Express 4.x 업데이트 된 답변

세션 처리는 더 이상 Express에 내장되지 않습니다. 이 답변은 표준 세션 모듈을 참조 합니다 : https://github.com/expressjs/session

세션 데이터를 지우려면 다음을 사용하십시오.

req.session.destroy();

문서는 이것에 대해 약간 쓸모가 없습니다. 그것은 말한다 :

세션을 파괴하고 req.session을 제거하면 다음 요청이 다시 생성됩니다. req.session.destroy(function(err) { // cannot access session here })

이것은 현재 세션이 다음 요청에서 다시로드된다는 것을 의미 하지 않습니다 . 이는 다음 요청시 세션 저장소에 깨끗한 빈 세션이 생성됨을 의미합니다. (아마도 세션 ID는 변경되지 않지만 테스트하지는 않았습니다.)


즉각적인 요청이 아닌 세션에서 세션을 파괴하는 방법이 있습니까? 예를 들어 내가 필요한 것 모든 장치 기능의 저를 로그 아웃 구현한다면 그
무하마드 Umer

1
@MuhammadUmer 내가 아는 한, 임의의 세션을 파괴하는 내장 메커니즘이 없습니다. 스토리지에서 세션과 관련된 키를 삭제하거나 고유 한 세션 래퍼를 만들어이를 직접 쉽게 구현할 수 있습니다.
Brad

93

신경 쓰지 마세요. req.session.destroy();


8
이것은 Express 3에서 나를 위해 작동하지 않습니다. ´req.session.destroy () ´를 호출하려고합니다.
acidghost

6
ExpressJS 3.00에서 잘 작동합니다. req.session.destroy();acidghost처럼 사용 되었습니다.
hexacyanide 2011

1
req.session.destroy () 사용은 Express 2.5에서도 작동합니다
TulioPa 2013-08-29

1
이 문서는 어디에 있습니까? 나는 그것을 찾으려고 노력하고있다.
huggie 2014-02-27

25

이 질문은 어떤 유형의 세션 저장소가 사용되었는지 명확하지 않았습니다. 두 답변 모두 올바른 것 같습니다.

쿠키 기반 세션의 경우 :

에서 http://expressjs.com/api.html#cookieSession

req.session = null // Deletes the cookie.

Redis 등 기반 세션의 경우 :

req.session.destroy // Deletes the session in the database.

1
req.session.destroy은 본질적으로, 여기에 소스 코드를 볼 "삭제 req.session"에 대한 래퍼입니다 : github.com/expressjs/session/blob/master/session/session.js
tfmontague


6

사용하다,

delete req.session.yoursessionname;

이것에 관한 문서를보고 싶습니다.
Lazy

5
모든 반대 투표 @Nithin; github (github.com/expressjs/session/blob/master/session/session.js)에 문서화 된 session.destroy () 함수 메소드는 "delete this.req.session"을 사용합니다. 정확히 @Nithin의 대답은 아니지만 "삭제"를 사용하는 것도 올바른 해결책입니다 (다른 답변에서는 다루지 않음).
tfmontague 2014

이것이 적절한 해결책입니까? 메모리 누수가없고 장난스러운 일이 일어나지 않을까요?
Rajath

5

를 사용하면 req.session = null;실제로 세션 인스턴스가 삭제되지 않습니다. 가장 적절한 해결책은 req.session.destroy();이지만 이것은 본질적으로 delete req.session;.

https://github.com/expressjs/session/blob/master/session/session.js

Session.prototype.destroy = function(fn){
  delete this.req.session;
  this.req.sessionStore.destroy(this.id, fn);
  return this;
};

5

Session.destroy (콜백)

세션을 파괴하고 req.session 속성을 설정 해제합니다. 완료되면 콜백이 호출됩니다.

안전한 방법 ↓ ✅

req.session.destroy((err) => {
  res.redirect('/') // will always fire after session is destroyed
})

안전하지 않은 방법 ↓ ❌

req.logout();
res.redirect('/') // can be called before logout is done

0
req.session.destroy(); 

위의 내용은 나를 위해 작동하지 않았으므로 이것을했습니다.

req.session.cookie.expires = new Date().getTime();

쿠키 만료를 현재 시간으로 설정하면 세션이 자체적으로 만료됩니다.


-5

여러 곳에서 언급했듯이 req.session.destroy () 함수가 제대로 작동하도록 할 수 없습니다.

이것은 내 작업입니다 .. 트릭을 수행하는 것 같지만 req.flash를 사용할 수 있습니다.

req.session = {};

req.session = null 을 삭제하거나 설정하는 경우 ; , 그러면 req.flash를 사용할 수없는 것 같습니다.


1
이것은 세션 해시를 변경하지 않기 때문에 보안 문제입니다
Tosh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.