2012-02-22 12 views
6

로그인 한 일부 사용자가 장고 응용 프로그램을 만들고 싶습니다. 다른면에서는 실시간 기능이 필요하기 때문에 Express.js 응용 프로그램을 사용하고 싶습니다.Django 및 Express.js 응용 프로그램의 Redis에서 세션 저장소 공유

이제 문제는 인증되지 않은 사용자가 Express.js 응용 프로그램의 데이터에 액세스하지 못하게하려는 것입니다. 따라서 Express.js와 Django 응용 프로그램간에 세션 저장소를 공유해야합니다.

휘발성 키가이 적합성을 위해 완벽하기 때문에 Redis를 사용하는 것이 좋습니다. 응용 프로그램의 다른 부분에 이미 Redis를 사용하고 있습니다. 나는 django-redis-session 응용 프로그램을 사용하여 생각하는 것, 장고 측면에서

[...] 
this.sessionStore = new RedisStore; 
this.use(express.session({ 
    // Private crypting key 
    secret: 'keyboard cat', // I'm worried about this for session sharing 
    store: this.sessionStore, 
    cookie: { 
    maxAge: 1800000 
    } 
})) 
[...] 

다음 Express.js 응용 프로그램에

, 나는 이러한 종류의 코드이있을 것이다.

그래서,이 좋은 생각인가? 문제가 없습니까? 특히 비밀 키에 대해서는 두 세션이 같은 세션을 공유 할 것인지 확신하지 못합니다.

+0

express 또는 django 용 사용자 정의 처리기를 작성하고, 쿠키를 인코딩하는 방법을 동기화하고, 쿠키의 세션 식별자를 redis 키로 매핑하는 방법과 redis 값을 세션에 매핑하는 방법을 분명히 작성해야합니다 . –

+0

ㅎ, 상자 밖으로 나오게 할 방법이 없나요? 두 시스템에서 일한 사람의 의견을 듣고 싶습니다 (어쩌면 당신은 모르겠습니다 :)). –

+1

물론, 당신은 나를 믿을 필요가 없습니다. 나는 django-redis-session으로 일한 적이 없다. 하지만 저는 Express와 Django에서 많은 일을했습니다. 익스프레스 세션이 JSON이고 Django 세션이 피클 링 된 Python 객체이기 때문에 여기와 그 어느 곳에도 없습니다. 그래서 그것은 효과가 없을 것입니다. Express는 세션을'sess : sessionId'로 저장합니다. django-redis-session은 redis 키와 세션 id 사이를 매핑하기 위해 다른 스키마를 사용합니다. –

답변

3

Express 또는 Django 용 사용자 지정 세션 저장소를 작성해야합니다. Django는 기본적으로 (django-redis-sessions와 마찬가지로) 세션을 피클 링 된 Python 객체로 저장합니다. Express는 세션을 JSON 문자열로 저장합니다. Express는 connect-redis를 사용하여 세션을 키 sess:sessionId에 저장합니다. 장고 (Django)는 키를 sessionId으로 저장합니다. django-redis-sessions를 기본으로 사용하고 encode, decode, _get_session_key, _set_session_key 등을 무시할 수 있습니다. 또한 쿠키가 동일한 방식으로 저장되고 암호화되는지 확인해야합니다.

분명히 Python 객체를 pickle 및 unpickle 할 수있는 Express 용 세션 저장소를 만드는 것이 더 어려울 것입니다.

+0

고마워요! :) –

+2

사실 Django 1.5.3부터 Django 세션을 JSON 형식으로 직렬화 할 수 있습니다. https://docs.djangoproject.com/ko/1.5/topics/http/sessions/#session-serialization을 참조하십시오. – Druska

관련 문제