로그인 관련 세션 및 쿠키(백그라운드)
세션 및 쿠키 관계
session은 쿠키를 바탕으로 이루어진 것이다. session이 만들어진 후에 유일한 sessionid를 생성하여 브라우저에 되돌려주고 브라우저의 쿠키에 저장한다. 다음에 고객이 서버 인터페이스를 다시 호출하면 서버는 클라이언트가 보낸 쿠키에서name이sessionid인 쿠키가 존재하는지 찾는다. 존재하면 이 쿠키의 값을 통해 사용자가 만든 session을 찾는다.존재하지 않으면 새session을 만듭니다.
그러나sessionId를 저장하는 쿠키는 기본적으로 세션 단계입니다. 브라우저의 메모리에 저장되어 있습니다. 브라우저가 닫히면 이 쿠키도 사라집니다. 그래서 새로운 브라우저를 다시 엽니다. 이때sessionid라는 쿠키가 존재하지 않기 때문에 서비스는 새로운session을 만들 수 있습니다. 그러나 원래의session은 존재합니다!즉 이때 서버에 모두 두 개의 세션이 존재한다는 것이다.
쿠키의 만료 시간을 설정하려면 브라우저의 브라우저가 닫히면 쿠키를 지우는 기능을 닫아야 합니다
쿠키 만료 시간
그러나 쿠키도 기한을 설정할 수 있다. 설정하지 않으면 기본적으로 브라우저가 닫히면서 알 수 있다. 기한을 설정하지 않은 쿠키는 브라우저만 존재하기 때문에 기한을 설정하면 로컬 하드디스크에 저장되고 브라우저가 닫히면 쿠키에 영향을 주지 않는다(기한이 지나지 않으면 자동으로 지워진다). 이때 브라우저가 다시 열리면 로컬에서 쿠키를 읽고 서버에 전송한다.반복 실행 과정 1.이것은 일정 시간 동안 사용자 로그인 면제 요구 등에 사용할 수 있다
세션 만료
세션도 만료 시간이 있습니다. 기본값은 20분입니다. 20분 후에 세션을 자동으로 지웁니다.세션이 만료되면 브라우저에서 보내는 쿠키는 서버에서 대응하는 세션을 찾을 수 없습니다. 세션이 존재하지 않기 때문에 다시 로그인하고 세션을 설정해야 합니다. 반복 과정 1
구체적인 프로젝트 코드를 결합하여 이야기하다.
프로젝트 세부 코드
주간지 로그인에서
koa-session-minimal
와 koa-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
의 값과 일치합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
서버에서 쿠키 만료 값 가져오기브라우저는 쿠키 만료를 처리하므로 쿠키의 만료 값을 서버에 전달하지 않습니다. 서버에서 쿠키의 만료 값을 얻으려면 일부 조정을 해야 합니다. 두 가지 방법이 있습니다. JSON 값으로 쿠키를 생성할 수 있습니다 다른...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.