2017-12-12 9 views
0

우리 팀은 Sails.js 프레임 워크를 사용하여 앱을 관리하고 있으며이 앱은 더 큰 앱의 관리 패널 역할을하므로 많은 트래픽이 발생하지 않습니다. 간소화하고 움직이는 부분을 최소화하기 위해 세션 저장소에 기본적으로 사용되는 Redis 종속성을 제거하려고했습니다 (https://sailsjs.com/documentation/reference/configuration/sails-config-session).sails.js redis 세션 저장소를 쿠키 또는 localstorage로 바꿉니다.

세션 저장소를 사용자 시스템에있는 쿠키 저장소 또는 LocalStorage로 바꾸는 것이 좋습니다. Sails.js는 그들의 세션 스토어가 익스프레스의 세션 스토어에 크게 의존한다고 주장합니다. 우리는 쿠키 기반 저장소 (https://github.com/expressjs/cookie-session)를 우연히 발견했지만 통합에 대해서는 혼란 스럽습니다. Sails에있는 config/session.js 파일은 세션 저장소에 대한 어댑터를 정의하지만 추가 래퍼 없이는 위의 라이브러리와 호환되지 않는다고 가정합니다. Sails 어댑터를 검색하면 세션 스토어 어댑터 대신 데이터베이스 어댑터로 이동합니다. 내가 이것을 과장 시켰습니까? 위의 라이브러리 (또는 단순한 LocalStorage 대안)를 Redis 대신 Sails에 묶을 수 있습니까?

+0

어이 알렉산더는 단일 서버에서 배포되거나 실행되는 돛 응용 프로그램입니까? – Glen

+0

현재 단일 서버 (단일 인스턴스)에서 실행 중입니다. 그러나 팀은 미래에 내결함성이있는 버전을 출시하려고합니다. 이는 분산 된 방식으로 배포 될 것입니다. (현재 단일 도커 컨테이너를 사용하고 있으며 생산을 위해 Kubernetes를 고려하고 있습니다. 설정). –

답변

0

나는 그것이 당신이 지나치게 복잡하다고 생각할 수 있습니다.

옵션 1 : 여기 당신을 위해 몇 가지 옵션이 있습니다 기본 항해 세션 저장소 밖으로 상자의

이 항해는 기본 세션 미들웨어에 번들로 기본 메모리 저장소를 사용합니다. 이 세션 저장소는 메모리 저장소에 있으므로; a) 단일 인스턴스를 통과하지 못함, b) 모든 사용자가 Sails 응용 프로그램을 다시 시작한 후에 다시 로그인해야하며 c) 프로덕션 환경에는 권장되지 않습니다.

그런데 현재 현재 프로덕션 응용 프로그램에서 기본 메모리 저장소를 사용하고 있습니다. 응용 프로그램은 매우 기본적이고 안정적이며 분기마다 한 번씩 변경됩니다. 다시 시작한 후 사용자는 다시 로그인 만하고 세션은 다시 작성됩니다.

응용 프로그램을 처음 실행할 때 특히 현재 여러 서버로 확장 계획이없는 경우 확실한 선택입니다.

기본 Sails 세션 저장소를 사용하려면 config/session.js 파일을 변경하지 않거나 Redis를 이미 구성한 경우 config/session.js에 다음 줄을 주석 처리하십시오.

// adapter: 'redis', 

// host: 'localhost', 
// port: 6379, 
// ttl: <redis session TTL in seconds>, 
// db: 0, 
// pass: <redis auth password>, 
// prefix: 'sess:', 

옵션 2 : 호환을 사용으로 확장 캐시는 항해 세션 통합 Express와 연결에 크게 기댈으로

, 당신은 한, 항해와 연결/Express 용으로 작성된 세션 어댑터를 사용할 수 있습니다 번역.

호환되는 Connect 기반 Express 세션 저장소의 전체 목록은 here입니다.

가 특정 캐시는 설계를 제공

, 제 생각에이 확실한 옵션은 상자 밖으로 지원 돛 hereRedis 사용할 수있는 연결-memjs 패키지를 활용 Memcached이다.

Memcached는 간단한 휘발성 캐시 서버입니다. Redis는 캐시 서버 이상이지만 캐시 역할을 할 수있는 최대 512MB의 키/값 쌍을 저장하는 최대 1MB의 문자열로 제한된 키/값 쌍을 저장할 수 있습니다. Redis vs Memcached에 대한 자세한 내용은 here을 참조하십시오.

옵션 3 : 당신이 이미 몽고, 소파, 디나모 또는 경우 MSSQL 데이터베이스가 스택에 구성한 경우 데이터베이스

를 사용하여, 당신은 세션 저장소로의 사용을 고려할 수 있습니다. 그들은 모두 이미 Connect 기반 패키지를 가지고 있습니다. 각 링크는 위의 호환 가능한 Connect 기반 Express 세션 저장소 목록에서 찾을 수 있습니다.

옵션 2와 3의 설정은 매우 유사합니다. 예제는 언급 한 페이지의 Sails.js 웹 사이트에서 찾을 수 있습니다.

adapter: 'connect-mongo', 

C를 :

A) 연결 - 몽고 패키지

npm install connect-mongo --save 

B) 설정/session.js에 어댑터를 변경 설치 : 몽고와 같은 설정 데이터베이스는 다음과 같이 간단합니다) 데이터베이스에 관련된 옵션 어댑터 값을 추가

url: 'mongodb://user:[email protected]:port/database', 
collection: 'sessions', 
auto_reconnect: false, 
ssl: false, 
stringify: true 

알 ternatively : 쿠키

전혀 세션을 할 필요가 없다면. 당신은 당신이 쿠키를 사용하여 클라이언트에게이 기능의 많은 부분을 푸시한다고 언급 할 수 있습니다.

돛에는 gettingsetting 쿠키가 들어 있습니다.

쿠키 관리와 관련하여 컨트롤러 기반 쿠키의 컨트롤러 수준이나 더 많은 전역 데이터를위한 미들웨어에서이 작업을 수행 할 수 있습니다.

들어오는 요청에서 쿠키를 얻으려면 도트 표기법을 사용할 수 있습니다. 예 :

req.cookies.username; 

그리고 응답에 쿠키를 설정하려면 JSON을 사용할 수 있습니다. 예를 들면 다음과 같습니다.

res.cookie('username', 'John Smith', { maxAge: 900000, httpOnly: true }); 

제 생각에는이 대체 방법을 사용하면 많은 수동 오버 헤드가 발생할 수 있습니다. 브라우저의 개발자 콘솔을 통해 쿠키에 저장된 모든 정보에 액세스 할 수 있으므로 보안 관련 사항도 고려해야합니다. Sails 세션을 사용하는 것과 비교하여 Sails에서 생성 된 세션 ID 만 클라이언트 측에서 사용할 수 있습니다.