개념공부

Session, Cookie + 자동 로그인 기능

Cadi 2025. 3. 6. 02:01

Session

  • 서버에서 관리하는 사용자 상태 정보
  • 사용자가 로그인 시 서버가 세션을 생성하고, 특정한 세션 ID를 발급함
  • 사용자가 요청을 보낼 때마다 세션 ID를 서버에 전달하면, 서버는 해당 사용자가 누구인지 알 수 있음
  • 세션 정보는 서버 메모리, 데이터베이스, 혹은 파일 저장소에 저장됨

특징

  • 서버에서 관리됨 : 클라이언트에는 세션 ID만 저장
  • 보안성이 높음 : 사용자 정보가 클라이언트에 저장되지 않음
  • 서버 메모리 사용 : 너무 많은 세션을 유지하면 서버에 부담이 될 수 있음
  • 기본적으로 일정 시간 지나면 만료 : maxAge 설정 가능

Cookie

  • 클라이언트에 저장되는 작은 데이터 조각
  • 서버가 응답을 보낼 때 클라이언트에게 쿠키를 저장하라고 명령할 수 있음
  • 클라이언트가 다시 요청할 때 쿠키 정보를 자동으로 서버에 전송함
  • 로그인 상태 유지, 사용자 설정 저장 등에 사용됨

특징

  • 클라이언트에 저장 : 서버에 부담이 가지 않는다.
  • 보안성이 낮음 : 사용자가 쿠키를 조작할 수 있다
  • 만료 기간 설정 가능 : 브라우저가 종료되어도 남아 있을 수 있음
  • HTTP 요청 시 자동으로 서버로 전송됨

 

이를 이용해서 자동 로그인 기능을 만들어 보았다. 

우선 , 세션과 쿠키를 저장하는 코드다. 

 

app.use(session({
  secret: process.env.SESSION_SECRET || 'session-login',
  resave: false,
  saveUninitialized: false,
  store: new fileStore({
    path: './sessions',
    ttl: 24 * 60 * 60,
    reapInterval: 60 * 60
  }),
  cookie: {
    httpOnly: true,
    secure: process.env.NODE_ENV === 'production',
    maxAge: 24 * 60 * 60 * 1000
  }
}))
 

 

세션은 명확히 루트 디렉토리 아래의 sessions 파일에 저장되지만, 

쿠키는 따로 명확한 위치가 없다. (기본적으로 클라리언트의 cookie storage에 저장, UnityWebRequest의 경우 쿠키를 자동 저장하지 않기 때문에 직접 저장해야 한다)

 

로그인 후 확인해보자면, 

 

저 밑에 Response에 set-cookie라는 이름을 갖는 쿠키 값이 있는 것을 확인할 수 있다. 

var cookie = www.GetResponseHeader("set-cookie");
if (!string.IsNullOrEmpty(cookie))
{
    int lastIndex = cookie.LastIndexOf(";");
    string sid = cookie.Substring(0, lastIndex);
    PlayerPrefs.SetString("sid", sid); 
}

 

우리는 다음과 같은 코드로 signin을 할 때 쿠기 값을 가져와서 PlayerPrefs에  Sid라는 이름으로 저장할 것이다. 

 

문제 : cookie의 값이 계속 Null이 나오는 문제

현재,  cookie의 값에 아무것도 할당되지 않고 있다.

set-cookie라는 헤더가 전달되지 않고 있다는 뜻인데, 유니티에서는 자체적으로 쿠키를 저장하지 않는 것으로 알고 있기 때문에 한 번 이상 signin이라는 데이터를 전송해도 전송 시 Header에 cookie값이 포함되지 않기에 응답의 헤더에 

set-cookie가 오는 것이 정상이고, 그렇게 된다면 cookie 값이 null이 나오면 안된다. 

 

해결 : Session을 삭제하고 하면 새로 set-cookie를 보내면서 된다. 

내일 확실하게 질문해봐야겠다. 

 

 

 

결론 : 쿠키를 안쓰는게 좋다. 

'개념공부' 카테고리의 다른 글

SocketIO 관련 정리  (0) 2025.03.12
JSON 기초 정리 (with Unity)  (0) 2025.03.11
UnityWebRequest  (0) 2025.03.05
Task, Async/Await  (0) 2025.02.22
생성자(Constructor)  (0) 2025.02.18