[node.js] cookie session

정대만·2023년 4월 19일
0


쿠기의 값을 키 벨루 값으로 뽑아내는것이다.

  • 업데이트 버전이나.. 공격 가능성이 있다. 또한 변수 변화가 있어서 취약 성문제가 있기 때문에 사용하지는 않는다.

  1. req.url 에 들어있는 qurey 를 분석해서 쿼리에 있는 이름을 뽑아낸다.
  2. 헤더의 set-cookie 부분에 이름 (name= // 한글 이름이여서인코딩을 한거
    만기 시간을 넣어서 보낸다
  3. 만약 쿠기의 이름이 존재하는 경우에는 > 내가 보내고 싶은 파일을 보내거나.. html 파일을 읽어서 ( 백엔드 서버에 존재하는 .. html 을 읽어서 data를 보낸다.

인강

app.use(session({secret:'my secret' , resave: false, saveUnitinitilizaed:false});

저장할 필요가 없는 요청인 경우 변경된 내용이 없어서 아무 세션저장 하지 못하게 함

saveUnitinitilized

세션 사용하는 법
req.session.isLoggeind= true;
브라우저에 있는 < 에서 f12 에서 볼수있다.
[암호화가 발생한 것을 확인할수 있다]

세션에 해당하는 쿠키가 있기 때문에 구별할수 있다.

쿠기 설정

exports.postLogin= (req,res,next)=>{
res.setHeader('Set-cokkie',LoggedIn= true; Max-Age=10 ,HttpOnly);
--> postLogin 을 통해 쿠키를 설정한다. httpOnly 를 통해 외부에서 접근할수 없게 만든다.

export.getLogin= (req,res,next)=>{
console.log(req.get('Cokkie') 를 확인해 보면

ㅇ리아링 loggedIn= true;
값 추출을 위해
.split(';')[1].trim().split('=')[1]

res.render('auth/login',{
.....
isAuthenticated:req.isLoggedIn
}
)

---> 쿠키가 존재하는 경우 쿠기를 뽑아서 랜더링 하는 페이지에 넣는다

개발자도구를 통해 변경이 쉽게 가능하고 // 밖에서 누락이 가능할수 도 있기 때문에...
--> 이런 경우 세션을 통해 도움을 받는다

세션

프론트엔드에 인증됬다는것을 저장하지 말고 백엔드에 저장한다
express 에서 저장하는것도 아니다.
디른사용자 xx 사용자 본인만 확인한다. --> 데이터 베이스에 저장한다.
클라이언트는 서버에게 자신이 속한 세션을 알려줘야한다.
세션은 단순히 저장된값에 불가해서 // 세션의 id 를 저장하는 쿠키를 사용한다. 특정 알고리즘으로 해시 처리됨 id 이기 때문에 서버 측에서만 확인할수 있다. ( -- 토큰과 비슷하다) 브라우너 내부에서는 변경할수 없다.

  1. npm install --sabe express-session 을 다운로드한다.
    2.const session= require('express-session')
    app.use(session({secret:'my secret' )// 해시에 해당하는 비밀키,
    resave:false,
    ); app.js 에 설정한다. (미들웨어에 설정함)

    expost.postLogin=(req,res,next)=> {
    // 이전의 쿠키에서 요청과 세션 객체로 접근한다.

    req.session.isLoggedIn= true;
    // 검색하고 잇는 장소를 식별한다.
    }

    exports.getLogin=(req,res,next)=>{

    console.log(req.session)< 세ㅔ션의 객체 로그를 볼수 있다.

  2. 메모리가 무한 하기 때문에 수십만의 사용자가 있는 상황에서는 어렵다

    메모리가 빠르게 오버 플로우 된다... 보안 측면에서 이상적이지 않다.

    npm install --save connect-mongdb-session
    //

  3. const mongoDb Store= require('connect-mongdb-session')(session) 새션의 정보가 여기 저장된다거 생각하면된다.

  4. const store=new MonodbStore({
    uri: MongoDbURI ( 몽고디비 어디에다가 저장하니),
    collection:session('아무거나 ')
    })

위에서 exports.postLogin 에서
req.session.user=user < 하면 자동으로 저장된다.

  1. app.use 부분 수정하기

app.use(session({secret:'my secret' , resave: false, saveUnitinitilizaed:false
++ store: store
});
세션데이터가 여기 저장된다. mongodb 에 저장된다는 의미이다.
만료 일자도 볼수 있다..

  1. 세션을 다 지우는 방법
    req.session.destroy(()=>
    res.redirect('/')
    ;
profile
안녕하세요

0개의 댓글