본문 바로가기

Others/NODE.JS

Session (세션)

Session (세션)

 

쿠키를 개선한 방식.

쿠키를 조금 더 안전하게 (더 많은 데이터를) 사용자의 컴퓨터에 저장한 것과 같은 효과를 나타낸다.

 

웹브라우저가 서버에 접속하면, 서버는 웹 브라우저에게 응답을 하면서 쿠키로 모든 데이터를 저장하게 된다.

예를 들면 쇼핑카트라고 한다면, 사용자가 어떤 제품을 카트에 담았는지를 제품에 대한 목록을 사용자의 컴퓨터에 저장하고 있다.

 

이런 방식으로 접근을 한다면 여러가지 문제점이 있다.

제일 큰 문제점은 보안 : 사용자의 컴퓨터와 서버가 서로 통신하는 과정에서 ID,PW와 같은 중요한 정보가 왔다갔다 한다는 것은 중간에 누가 가로챌 수 있다.

 

이런 문제점을 개선하기 위해서 쿠키가 가지고 있는 기능과 서버쪽 데이터를 저장할 수 있는 예를 들면 DB, 파일 등을 잘 조합해서 세션을 만들어서 사용하면 된다.

 

 

 

세션 동작 원리

 

사용자가 서버에 접속했을 때, 서버는 사용자의 컴퓨터(클라이언트)에 쿠키 방식으로 데이터를 저장하는데요,

이 때 저장하는 데이터는 쿠키 방식과는 다르게 오직 사용자의 식별자인 ID값 만을 저장합니다.

 

예를 들면 접속한 사용자를 abcde라고 했을 때, abcde의 값만 사용자의 브라우저에 저장이 되고, 그 값에 대한 정보는 서버쪽의 DB, 파일, 메모리 등에 실제 데이터가 저장된다.

 

실제 데이터는 서버에 저장되어 있고, 사용자의 컴퓨터는 사용자를 식별할 수 있는 식별자만 아주 심플하게 저장합니다.

그리고 사용자가 서버에 접속했을 때, 요청으로 그 식별자를 저장하면 그 식별자에 해당하는 실제 데이터를 DB,파일,메모리 등에서 읽어와서 사용할 수 있다는 것.

 

 

 

코드로 접근해보자;;어떻게 세션이 동작하는지 살펴보자.

 

외부에서 봤을 때, 쿠키와 세션의 차이 (connect.sid 유무)

 

각각 네트워크탭을 확인해보면

HTTP 통신 부분에서, 쿠키의 Response Headers의 Set-Cookie 정보를 볼 수 있다. 새션은 Response Headers의 set-cookie를 들여다 보면 connect.sid의 값은 있는데 어디에도 저장한 쿠키 이름이 보이지 않습니다.  connect.sid : 웹서버는 웹브라우저에 구체적인 값을 저장하는 대신에 웹브라우저에게 고유한 고유한 값을 전달하고 있다. 이 값이 중복될 가능성은 거의거의 없다. 이 값을 서버가 브라우저에게 줍니다. 그럼 브라우저는 서버에 접속할 때 connect.sid 값을 통해 서버로 값을 전달한다.

서버 입장에서는 connect.sid 같은 요청은 같은 사용자의 접근이라고 간주할 수도 있겠다. 그렇다면 서버쪽에서는 DB,파일, 메모리 같은 곳에 connect.sid 값에 해당되는 값을 이용해서 어떤 정보를 가져올 것이다.

 

쿠키정보를 쿠키는 그대로 저장, 세션은 사용자의 식별자를 저장 ( 응답할 때, 그 식별자에 해당하는 정보를 꺼내줌)

세션의 장점 : 사용자의 컴퓨터 자체에 쿠키 값이 저장되지 않기 때문에 훨씬더 안전.

세션 아이디 값에는 의미있는 정보가 없기도 하고.

그리고 데이터가 사용자의 컴퓨터가 아니라 서버에 저장 ( 쿠키는 사용자의 컴퓨터에 저장 )

 

그래서 일반적으로 쿠키보다는 세션으로 많이 사용.

 

 

 

 

코드로 접근하기

 

 

npm install express-session --save 설치

(참고링크)

 

1. 세션모듈가져오기 (Line 3)

2. 세션모듈을 사용(app.use)할 수 있도록 함수를 호출 (Line 5-9)