https://interconnection.tistory.com/74
쿠키와 세션 개념
노션 페이지(아래 내용과 동일) 개요 쿠키와 세션은 개발자 말고도 인터넷 사용자라면 누구나 많이 들어본 단어입니다. 하지만 개념에 대해서는 많은 사람들이 헷갈려 하기에 쉽고 간단하게 정
interconnection.tistory.com
------------------------------------------------------------ ↑↑↑참고 링크↑↑↑ -----------------------------------------------------------------
HTTP 나 HTTPS 는 상태가 없다.
클라이언트가 서버에게 요청을 할 때 일시적으로 연결이 된 후 서버가 응답을 하고 나면 연결이 해제되버리기 때문에
다음 연결이 될 때는 이전에 어떤 상태였는지 알 수 없다.
클라이언트 와 서버가 이전에 어떤 상태였는지 알 수 있도록 하기 위해서 Cookie 와 Session 의 개념을 사용한다.
쿠키 (COOKIE)
클라이언트에 저장해서 클라이언트가 서버에게 요청할 때 마다 전송되는 객체.
[옵션]
이름, Expires(만료시간 - 날짜), Max-age(만료시간 - 초), Domain(도메인), Path(URL), Secure(HTTPS 인 경우만 전송), HttpOnly(자바스크립트에서 수정을 못하도록 하는 경우 사용)
세션(SESSION)
클라이언트의 정보를 서버에 저장하는 기술.
노출이 되면 안되는 데이터를 서버에 저장하고 클라이언트에서는 이 정보를 구별할 수 있는 세션 키만 저장함.
클라이언트에 저장하게 되면 노출이되고 이를 수정할 수 있기 때문에 보안에 취약하다는 단점을 보완 해준다.
클라이언트 측에서 기존 작업에 이어서 다른 작업을 하고자 할 때 세션을 이용한다. 세션은 서버의 메모리를 사용하기 때문에 너무 크거나 많아지면 서버의 성능이 저하된다. 이런경우에는 세션을 파일이나 데이터베이스에 유지하는 것이 더 좋다.
주로 로그인 정보를 저장하는데 많이 이용을 했는데
최근에 JWT(Json Web Token)를 이용하는 것을 권장하면서 사용 빈도는 줄어들었다.
쿠키와 세션의 차이점
쿠키와 세션의 가장 큰 차이점은 사용자의 정보가 저장되는 위치다.
쿠키는 클라이언트(브라우저)에 저장되며, 세션은 서버에 저장된다.
보안 면에서는 세션>쿠키지만,
속도면에서는 쿠키> 세션 이다.
그 이유는 쿠키는 서버 자원을 이용하지 않는 반면
세션은 서버의 자원을 이용하기 때문에 사용자가 많아질 수록 무거워져 메모리를 많이 차지하기 때문이다.
또한, 세션에 저장하는 행위는 클라이언트 와 서버가 동일한 도메인 경우만 가능한데
쿠키를 이용하면 클라이언트 와 서버의 도메인이 달라도 저장이 가능하다는 점에서 차이가 있다.
------------------------------------- 실습
세션 만들기 예제; 새로 고침을 하면 +1 되게 만들기
(세션은 브라우저마다 따로따로 만들어진다는 점을 고려)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
// 1. 모듈을 가져오기 require를 사용한다 .
const express = require("express");
// 2. 웹 서버를 생성할 수 있는 인스턴스를 생성하기
const app = express();
// 3. 포트 설정
app.set("port", 4000);
//요청을 처리하는 함수 외부에 만든 변수는 모든 사용자가 공유한다. 이건 프라이빗한 게 아님. 그래서 접속자 수와 같은 경우는 이렇게 만들어도 된다.
let num = 1;
//세션을 사용하기 위한 모듈을 가져오고
const session = require("express-session");
//세션을 사용하기 위한 미들웨어 설정
//세션은 클라이언트에 키를 만들어서 매핑을 한다.
//이 때 키의 값을 알아보기 어렵게 하기 위해서 연산을 수행할 값을 주게 되는데, 이 값이 secret이다.
app.use(
session({
secret: "secretKey",
resave: false,
saveuninitialized: true,
})
);
//4. 사용자의 요청 처리
app.get("/session", (req, res) => {
//세션에 num값이 없으면 1로 초기화하고 있으면 1 증가
if (!req.session.num) {
req.session.num = 1;
} else {
req.session.num += 1;
}
// 내용을 화면에 출력
res.send("num:" + num + "<br/>" + "session의 num:" + req.session.num);
num = num + 1;
});
//5. 서버를 실행시켜서 사용자의 요청을 처리
app.listen(app.get("port"), () => {
console.log("서버 대기중");
});
|
cs |
'카카오 클라우드 스쿨' 카테고리의 다른 글
| React (1) (0) | 2022.12.09 |
|---|---|
| [node.js] 미들웨어 (0) | 2022.11.21 |
| [node.js]axios 라이브러리 (0) | 2022.11.17 |
| [node.js] 양방향 암호화 실습 (0) | 2022.11.16 |
| [node.js] Require 함수 (0) | 2022.11.16 |