-
Notifications
You must be signed in to change notification settings - Fork 62
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
$_SESSION 제거 및 하위호환 보장하는 캐시 친화적인 세션관리 #1613
Conversation
* make cache friendly * make cache-control public/private conditionally * use session_start() conditionally
* $_SESSION을 직접 사용하지 않고 Facede wrapper를 사용 * 보다 손쉬운 디버깅/추적 가능 * 세션 쿠키 사용의 최소화를 위한 밑작엄 * 다중 배열 지원 (라라벨 Support/Arr.php 참고하고 가져옴)
* getCompatSession(): 애드온 파일을 직접 검사하여 $_SESSION이 쓰이는지 검사하고 있으면 세션 시작함 * autoFixupSession(): 애드온 파일이 $_SESSION을 사용하는 경우에 간단한 regex를 이용해 새 스타일로 자동 변환
48bc742
to
d4d440e
Compare
애드온은 어찌어찌하여 호환성이 확보되었지만, 여전히 서드파티 모듈을 수정해야 한다는 뜻으로 들리는데요. 그렇다면 #1598 과 다른 점이 무엇인가요? 어차피 서드파티 모듈 수정을 요구할 바에는 차라리
이런 식으로 다차원 배열을 사용하거나,
이런 식의 조건식을 사용하는 경우에는 정규식으로 변환하기도 훨씬 까다롭고요.
|
PHP Fatal error: Call to a member function set() on a non-object in /home/travis/build/xpressengine/xe-core/classes/session/SessionCookieHandler.class.php on line 155 오류가 발생합니다. https://travis-ci.org/xpressengine/xe-core/jobs/70327436 확인해주세요. |
이것은
이건 다음과 같이 하면 됩니다. 코드상에서 다차원 배열을 쓰고 있는 부분이 있어서 이에 대한 지원도 같이 들어갔지요.
이 방식을 써야만 장기적으로 |
음 이 부분은 좀 살펴봐야겠네요. |
XE + VarnishCache 서버를 사용하고자 하시는 분들을 위해 간단한 설명서를 작성했습니다~ |
#1598 에서 갈라져나왔습니다.
$_SESSION
을 당장에 제거하는 것은 여러모로 어려울 것입니다만,하위 호환을 보장하는 것은 크게 어렵지 않네요.
애드온 파일을 직접 검사하여
$_SESSION
을 사용하는 지 검사하게 하여session_start()
를 자동으로 호출하게 끔 바꿨습니다.이와 아울러,
$_SESSION
을 직접 엑세스하는 경우에는 세션이 어디서 잘못 쓰이고 있는지 추적하는 것 자체가 어렵기때문에, 라라벨 플레임워크를 참조하여SessionCookie
라는 클래스를 도입하였습니다.이제는
$_SESSION['fooo'] = 'bar';
라고 할 것이 아니라SessionCookie::set('fooo', 'bar')
라고 호출해야 합니다.거의 대부분의
$_SESSION
을 직접 다루는 구문은 비교적 간단한 regex로SessionCookie::
스타일로 변환을 하였고, 일부 파일에 대해서 수동으로 고쳐줬습니다.이렇게 하고나서
$_SESSION
이 어디서 잘못 호출되거나, 쓸데없이 호출하고 있는지 찾았고, 그 부분에 대해 선택적으로session_start()
호출되도록 하였습니다.PHPSESSID
쿠키가 자동 세팅 =>PHPSESSID
가 세팅되었을 경우 무조건session_start()
호출됨PHPSESSID
쿠키가 비어있고, 세션을 쓸 필요가 없는 경우 =>session_start()
호출 안됨session_start()
가 호출이 안된 경우는 그냥 무시함session_start()
호출되어 세션 자동 세팅 =>PHPSESSID
쿠키 세팅예전 방식의 애드온은 여전히 작동합니다. 위에 써있는 것처럼 애드온 설정이 바뀔때 애드온의
$_SESSION
변수를 간단히 검사하여session_start()
가 자동 호출되도록 하였습니다.