고수님들은 조금 외면하셔도 될만한 글입니다..
그래도 굳이 조언 및 "이건 아닌거 같은데" 하는 구문은 저와 많은 초보를 위해서라도 따끔한 지적 부탁드립니다..
그럼 이제부터 세션과 session_set_save_handler(); 에 대해 조금 이야기 해보겠습니다.
open(경로, 이름){
=> 디비로 할경우 디비컨넥션 정도 잡아주면 될거 같구요.
}
close(){
=> 디비로 할경우 디비컨넥션 해제..정도....
자기가 넣고 싶은 내용들 잡아 넣으면 됩니다...
}
read(세션키){
=> 디비에 있는 각 세션값 리턴...
}
write(세션키, 값){
=> DB에 짱박는 로직....
}
destroy(세션키){
=> session_destroy() 함수 시 일어날 내용 짱박기 unregister 하고는 상관없음.
}
gc(타임){
=> 가비지콜렉터 수행시 필요한 상황.... 대게 시간 지난 세션들 삭제하죠..
}
session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
session_start();
이렇게 정의해 놓고...
우선 페이지 전체에...이 파일을 인클루드 시켰을시...
페이지 로딩되면...
open -> read -> write - >close; 순서로 일어납니다.(destroy안했을시);
(destroy 하면 open - >read -> destroy -> close 순으로 일어나구요.)
register 안해도 write는 일어나구요...
스타트와 동시에....쿠키로 세션키가 발생하니....값은 없으니 찍어보시면...값은 안나옵니다.
그래도 write는 수행.
open, read 에는 절대 echo문 들어가면 안되구요....
다른 정의 함수에는 echo문 들어가도 상관 없습니다.
그냥 쉽게 생각하면....
open, read -> session_start(); ->그다음 함수들 일어난다고 생각하세요...
그리고
$a = "aaaaa";
$b = "bbbbb";
session_register("a");
session_register("b");
이렇게 한번에 두개를 register 할경우 a따로 write함수가 실행되는게 아니고
a, b 합쳐서 write함수가 실행되는거구요...
그럼 바로 세션이 등록된게 아니냐..하구 물어볼수도 있는데...
어디 잠깐 짱박겠지요....그건 고수님들한테 물어보세요..
그럼 이경우는 어떻게 될까요?
$a = "aaaaa";
$b = "bbbbb";
session_register("a");
session_register("b");
if:
session_destroy();
세션. a, b둘다 등록은 되나...정의 함수는 실행이 안되고...
open, read, destroy, close 이렇게 나가겠지요..
else:
session_unregister("b");
세션. a, b둘다 등록은 되나...정의 함수는 a만 실행이 되고...
open, read, write(a만), close 이렇게..
출처 : http://www.phpschool.com
bibaram