로그인 관련 세션 및 쿠키(백그라운드)

3218 단어 cookiesession
세션 및 쿠키 베이스에 대한 설명:
세션 및 쿠키 관계
session은 쿠키를 바탕으로 이루어진 것이다. session이 만들어진 후에 유일한 sessionid를 생성하여 브라우저에 되돌려주고 브라우저의 쿠키에 저장한다. 다음에 고객이 서버 인터페이스를 다시 호출하면 서버는 클라이언트가 보낸 쿠키에서name이sessionid인 쿠키가 존재하는지 찾는다. 존재하면 이 쿠키의 값을 통해 사용자가 만든 session을 찾는다.존재하지 않으면 새session을 만듭니다.
그러나sessionId를 저장하는 쿠키는 기본적으로 세션 단계입니다. 브라우저의 메모리에 저장되어 있습니다. 브라우저가 닫히면 이 쿠키도 사라집니다. 그래서 새로운 브라우저를 다시 엽니다. 이때sessionid라는 쿠키가 존재하지 않기 때문에 서비스는 새로운session을 만들 수 있습니다. 그러나 원래의session은 존재합니다!즉 이때 서버에 모두 두 개의 세션이 존재한다는 것이다.
쿠키의 만료 시간을 설정하려면 브라우저의 브라우저가 닫히면 쿠키를 지우는 기능을 닫아야 합니다
쿠키 만료 시간
그러나 쿠키도 기한을 설정할 수 있다. 설정하지 않으면 기본적으로 브라우저가 닫히면서 알 수 있다. 기한을 설정하지 않은 쿠키는 브라우저만 존재하기 때문에 기한을 설정하면 로컬 하드디스크에 저장되고 브라우저가 닫히면 쿠키에 영향을 주지 않는다(기한이 지나지 않으면 자동으로 지워진다). 이때 브라우저가 다시 열리면 로컬에서 쿠키를 읽고 서버에 전송한다.반복 실행 과정 1.이것은 일정 시간 동안 사용자 로그인 면제 요구 등에 사용할 수 있다
세션 만료
세션도 만료 시간이 있습니다. 기본값은 20분입니다. 20분 후에 세션을 자동으로 지웁니다.세션이 만료되면 브라우저에서 보내는 쿠키는 서버에서 대응하는 세션을 찾을 수 없습니다. 세션이 존재하지 않기 때문에 다시 로그인하고 세션을 설정해야 합니다. 반복 과정 1
구체적인 프로젝트 코드를 결합하여 이야기하다.
프로젝트 세부 코드
주간지 로그인에서 koa-session-minimalkoa-mysql-session 중간부품을 사용하고 코드를 먼저 붙인다.
const config = require('../config/default');        //           
const session = require('koa-session-minimal');         //         
const MysqlStore = require('koa-mysql-session');    //         

let createSession = (app) => {
  // session       
  const sessionMysqlConfig= {
    user: config.database.USERNAME,
    password: config.database.PASSWORD,
    database: config.database.DATABASE,
    host: config.database.HOST,
    port: config.database.PORT
  };

  // session/cookie     
  let sessionOptions = {
    key: 'session-id',              // cookie     session-id     ,     koa:sess
    cookie: {                       //   cookie      
      domain: '',                   //   cookie      
      path: '/',                    //   cookie      
      maxAge: 1000 * 60 * 10,       // cookie     (  :ms)
      httpOnly: true,               //       http      
      overwrite: true               //       
    },
    store: new MysqlStore(sessionMysqlConfig)
  };

  app.use(async (ctx, next) => {
    //   hostname,  cookie domain   
    sessionOptions.cookie.domain = ctx.request.hostname;
    await next();
  });

  app.use(session(sessionOptions));
};


module.exports = createSession;

사용자가 로그인할 때마다 세션 설정:
ctx.session = {
    userId: '???'
};

세션을 저장할 때 이 파일의 설정을 통해 설정된 데이터베이스에 _mysql_session_store라는 테이블을 추가하고 다음 데이터를 저장합니다.
id: 'session-id:        ',expires: 'session       ',data: '       '

동시에 전방에session-id의 쿠키를 되돌려주고 클라이언트가 존재합니다. 요청할 때마다 쿠키를 서버에 동시에 보냅니다. 저희는 요청할 때마다ctx.session.userId 존재하는지 판단할 수 있습니다. 찾을 수 있는 것은sessio가 존재하고 기한이 지나지 않으면 대응 작업을 계속 수행할 수 있습니다.
참고:
사실 값을 추출할 때 중간부품은 우리에게 많은 작업을 해 주었다. 이 단계를 진행할 때 중간부품은 클라이언트가 보낸 쿠키에 대응하는 값을 통해 데이터베이스에 대응하는 데이터를 찾고 존재하고 기한이 지나지 않으면 대응하는 데이터, 즉 본고의userId를 되돌려준다.
이 중간부품의 세션 및 쿠키에 대한 만료 시간:
중간부품에서 기본적으로session 만료 시간은 하루이고 쿠키는 브라우저가 닫히면서 닫힙니다. maxAge 값이 0보다 크면 쿠키와session의 만료 시간은 maxAge의 값과 일치합니다.

좋은 웹페이지 즐겨찾기