앞서 설명했던 쿠키는 웹 브라우저에 저장되는 '키-밸류' 타입의 데이터라고 언급했습니다. 따라서 누구나 키에 따른 밸류를 확인할 수 있으므로 비밀정보를 쿠키로 보낸다면 비밀 정보를 아주 쉽게 탈취당할 수 있습니다.
세션은 이러한 문제점을 고려해서, 쿠키를 업그레이드 한 것이라 보면 됩니다. 쿠키와 달리 서버에 데이터를 저장하고 웹 브라우저는 Session ID만을 가지고 있기 때문에 비교적 안전합니다.
세션의 동작을 요약하면 다음과 같습니다.
서버는 웹 브라우저에게 세션 값을 보내줍니다. (sid 라고 하며, 아무런 의미도 없는 단순 식별자입니다.)
클라이언트는 접속할 때 자신이 가지고 있는 sid를 서버에게 전달합니다.
서버는 클라이언트가 보내준 sid를 가지고, 해당 유저를 식별합니다.
var session = require('express-session'); (1)
var MySQLStore = require('express-mysql-session')(session); (2)
var options ={ (3)
host: 'localhost',
port: 3306,
user: '',
password: '',
database: ''
};
var sessionStore = new MySQLStore(options); (4)
app.use(session({ (5)
secret:"asdfasffdas",
resave:false,
saveUninitialized:true,
store: sessionStore (6)
}))
(1) express-session 모듈을 로드합니다.
(2) express-mysql-session 모듈을 로드하되, 인자로 session을 넘겨줍니다.
(3) 데이터베이스에 접속하는 것이므로, host, port, user, password, database 정보를 객체로 저장해둡니다.
(4) 앞서 저장한 객체를 MySQLStore() 함수의 인자로 넘겨줍니다. 이 때 생성되는 객체를 sessionStore라는 변수에 저장합니다.
(4) session() 미들웨어를 설치합니다. secret은 keyboard cat으로 랜덤한 값을 입력해줍니다. secret 값은 공개되어서는 안됩니다. resave와 saveUninitialized는 세션을 다시 저장하냐, 초기화하냐 정도의 옵션인 것 같은데 저도 잘 모르겠습니다.. 보통 false와 true로 설정한다고 합니다.
(5) 저장소를 앞서 DB 연결로 생성된 sessionStore 객체로 지정합니다. (제가 지정한 DB에 session 테이블이 생성됨을 확인할 수 있습니다.)