42-webserv / SpaceX

Non-blocking I/O HTTP WEB Server
2 stars 1 forks source link

[⚙] [Bonus] Cookie - Session #50

Closed enaenen closed 1 year ago

enaenen commented 1 year ago

*cookie & session 처리

   cookie-header = "Cookie:" OWS cookie-string OWS
   cookie-string = cookie-pair *( ";" SP cookie-pair )

Session값 이 이미 있을 경우

  1. SessionStorage에서 SessionID 값으로 SessionStorage 에 저장된 Session 찾아오기
  2. 찾아온 Session 에서 밸류 값을 증가시키기
  3. 증가 시킨 값을 페이지 혹은 어딘가 사용

Session값이 없을경우

  1. Request의 FD + 현재시간 으로 Hash함수를 통해 SessionID 만들기
  2. 만들어진 SessionID 값과, Session 생성해서 매칭 후, SessionStorage에 등록
  3. Response Header 의 Set-Cookie 밸류로 SessionID 넣기



태스크

enaenen commented 1 year ago

/ for hashfuncs/

include

include

include

include

std::string makehash(int& fd) {

std::time_t t        = std::time(0);
uint32_t    hash_key = t;
uint32_t    seed     = fd % 64;

std::bitset<64> b(hash_key);
std::bitset<32> a(hash_key);
b <<= 32;
a <<= fd;

std::string table_left  = "0A1B2C3D4E5F6G7H8I9JaKbLcMdNeOf+";
std::string table_right = "PgQhRiSjTkUlVmWnXoYpZqvrwsxtyuz-";

std::string hash_str;
int         i = 31;
while (i >= 0) {
    if (b.test(i)) {
        hash_str += table_left[i];
    } else {
        hash_str += table_left[31 - i];
    }
    if (a.test(i)) {
        hash_str += table_right[i];
    } else {
        hash_str += table_right[31 - i];
    }
    --i;
}
return hash_str;

}