본문 바로가기

WebApp/Node.js-session

Node.js-session(cookie)

express.js 참조

expressjs.com/en/resources/middleware/session.html

 

Express session middleware

express-session Installation This is a Node.js module available through the npm registry. Installation is done using the npm install command: $ npm install express-session API var session = require('express-session') session(options) Create a session middl

expressjs.com

github.com/expressjs/session

 

expressjs/session

Simple session middleware for Express. Contribute to expressjs/session development by creating an account on GitHub.

github.com

 

 

1.npm install -s express-session  *session 설치

2. express session의 기본적인 예제

3.위 예제의 code 구현

3000/foo로 들어가면 리로드 할때마다 카운트가 1씩 증가하는데

그것이 가능한 이유는 session 떄문이다.

개발자도구의 애플리케이션탭 에서 쿠키를 보면

session.id라는 사용자를 식별하는 cookie 값이 만들어져서 서버에 접속할때마다 웹브라우져가 서버쪽으로 전송을

해주는 것이고 그러면 서버는 cookie 값을 가지고 cookie값에 해당하는 사용자의 데이터를 조작하는 것을 통해

1씩 값을 증가시키는 것이다. 

 

 

4.위 코드의 간략화 및 session 옵션 살펴보기

var session = require('express-session)에 따라서 express-session이라는 모듈을 설치하고

app.use(session() ~~~)에 의해서 사용자의 요청이 있을때마다 session이라는 함수를 실행시켜서 

session을 시작시킨다

 

그리고 session()함수안에는 객체를 전달하는데 객체 안의 값들에 따라서 session이 동작하는 

기본적인 동작방법을 바꿀 수 있다.

먼저 secret이라느 옵션은 꼭 넣어주어야하는 옵션이며

resave라는 옵션은 false로 보통 하는데 session 데이터가 바뀌기 전까지는 session 저장소의 값을 

저장하지 않는다는 뜻이고 true몇 값이 바뀌건 아니건 저장소에 저장을 한다는 것임

saveUniniaialezed 옵션이 true면  session이 필요하기 전까지는 session을 구동시키지 않는 다는 것

따라서 서버에 부담을 주지 않음

 

 

5.session을 설치하면 어떠한 변화가 생기는가?

 

console.log(req.session)을 해보면  session이라는 객체가 있다는 것을 알 수 있다

그러나 위의 app.use(session()~~~)을 비활성화하면 undefined가 된다

즉 session 미들웨어를 실행하면 request객체의 속성으로 session이라는 것을 생성해준다

 

 

6. 리로드 카운터 추가하기

만약에 session이라는 객체 안에 num이라는 값이 존재하지 않으면 num에 1이라는 값을 

주고 만약에 num값이 정의되어 있다면 기존에 있던 num값에 1을 더한 다음에

화면에 Vuews : num을 출력한다.

 

1. session 객체 num의 값이 없을때 우리는 그 객체 num에 1의 값을 셋팅하고.

 

2. 그 다음부터는 1이라는 값이 있기에 else가 실행되며 1이 더해지고 요청이 끝난다

 

3. 요청이 끝났을때 session 미들웨어는 내부적으로 session 저장소라는 곳에 num이라는 이름의 

값으로 우리가 만든 1이라는 값을 저장했다가 그 다음에 요청할떄 다시 그 1이라는 값을 우리에게

공급하고 그 요청이 끝나면 값이 1이 증가되겠죠 그럼 그 증가된 2를 저장했다가 그다음에는 3을

다음에는 4를 저장하는 식으로 해서 우리가 사용자의 정보를 유지할 수 있게 되는것

 

4. 그럼 그 정보는 어디에 저장되어 있냐 즉 메모리에 저장되어 있다 node.js를 끄면 메모리의 데이터가 사라지는데

다시 node.js를 키면 1부터 시작한다 즉 휘발되는 것이다

 

5. 이러면 휘발성의 단점이 있다 그래서 메모리 같은 휘발성이 없는 곳에 저장하는 방법이 있다 

 

 

7.session store 즉 세션 저장소를 변경하는법

 

기본적으로는 메모리인데 메모리는 휘발되기 때문에 저장소를 변경 할 수 있다

여러 store 중에서 file을 사용해 보자

 

1.npm insrtall session-file-store

2.아래의 var fileStore = require('session-file-store')(session); 복사 

3. 코드 붙여 넣기 이후 session 객체에다가 store: new fileStore() 추가

 

4.리로드하면 sessions라는 디렉토리에 파일이 추가됨

그리고 num:1 이 되고은 리로드하면 2로 바뀜 또 하면 3, 4, 5 순으로 계속 증가

 

즉 우리가 사용하는 express session 미들웨어는 실행되면서 사용자가 세션아이디를 가지고 있는 상태에서

서버로 접속하면 리퀘스트 헤더의 쿠키 값으로 서버쪽으로 세션아이디를 전달하는데

그러면 세션미들웨어가 저 아이디 값을 가지고 세션 스토어에서 적당한 아이디값에 대응되는 파일을 읽고

그 데이터를 기반으로 해서 리퀘스트 객체의 세션이라고 하는 속성의 객체를 추가함 그리고 그 스토어에 있는 값의

[num이 2 니까 num의  값을 2로 셋팅해서 공급해주는 것 

그리고 num의 값을 바꾸면 리퀘스트가 끝난 다음에 세션미들웨어가 파일에다 그 변경한 num의 값을 적고 끝나는것

*먼소린지 나도 모르겟음..

 

 

'WebApp > Node.js-session' 카테고리의 다른 글

Node.js-session with express 2  (0) 2020.10.06
Node.js-session with express  (0) 2020.10.05