CI 묻고 답하기

제목 결국 CI session library는
글쓴이 케이든 작성시각 2009/12/28 16:23:29
댓글 : 9 추천 : 0 스크랩 : 0 조회수 : 23441   RSS
몇개글 아래 웅파님 댓글을 보면

CI session은 클라이언트 로컬시간과

서버로컬시간을 비교해서 쿠키를 관리?한다고 들었습니다.


그럼 글로벌 사이트를 만들때는 CI session은 사용을 못하는걸까요?
 다음글 include 를 어떻게 해야될까요? (2)
 이전글 URL을 seqment로 전달하는 방법 (3)

댓글

변종원(웅파) / 2009/12/28 16:40:54 / 추천 0
제 경우는 서버의 시간이 빨라서 세션의 생성된 last_activity가 클라이언트의 시간보다 빨라서 문제가 됐던 것 같습니다.
last_activity는 time()으로 생성된 값이 들어가기때문에 문제는 없을 것 같습니다.
time()값은 한국이던, 미국이던 상관없이 동일할테니까요.
date() 명령어를 통해 로컬화된 시간이 표기 되는 것이구요.
케이든 / 2009/12/28 16:52:30 / 추천 0
음 머리가 나빠서 이해가 잘 안되네요 ㅠㅠ
변종원(웅파) / 2009/12/28 18:02:17 / 추천 0
last_activity 비교시간이 5분으로 설정되어있는데 서버과 클라이언트의 시간차이가 4분 59초라고 가정을 하면
바로 세션 만들고 유효기간이 만료가 되겠죠. 유효기간이 만료되면 새로운 세션아이디를 만들테고
그러면 그전에 로그인했던 것은 쓸수가 없게 되는겁니다.
(저도 글로 설명하게 힘드네요. ^^;)
아이고 저도 헷갈리네요. T.T

kirrie / 2009/12/28 23:16:09 / 추천 0
음.. 아닐텐데요;;  last_activity는 서버시간 기준으로 계산됩니다. 세션 라이브러리의 _get_time 메소드가 현재 서버시간을 리턴하기 때문에, 인크립팅된 쿠키와 데이터베이스에는 모두 서버시간이 들어갑니다. 로컬타임과 비교한다면 문제가 크겠죠..
kirrie / 2009/12/28 23:16:58 / 추천 0
케이든// 글로벌 사이트 만들어도 상관없습니다.
kirrie / 2009/12/28 23:21:26 / 추천 0
정리하자면, 세션 라이브러리가 로딩되면, 쿠키를 읽습니다. 이때 쿠키에 인크립팅되어 저장된 정보는 데이터베이스에 저장된 (혹은 저장될) session_id, ip_address, user_agent_last_activity 정보입니다. 만약에 쿠키가 없어서 (즉, 첫 접속이라면) 읽을 수 없다면, 세션을 생성합니다. 여기서 위에 이야기한 4가지 정보를 서버에서 생성해서 인크립팅하여 쿠키에 저장하고 동시에 데이터베이스에도 저장합니다.
만약 쿠키가 있어서 읽을 수 있다면, 읽은 쿠키를 디크립팅해서 위 4가지 정보를 가져옵니다. 이걸 기반으로 데이터베이스에 저장된 세션 데이터와 비교합니다. 이렇게 해서 동일한 세션임을 확인하는거죠. (동시에 set_userdata등으로 저장된 정보도 가져옵니다.)
변종원(웅파) / 2009/12/29 10:02:54 / 추천 0
로컬시간과 비교하지는 않네요. 전에 첫번째 페이지에서는 세션이 생성되고 다른 페이지로 이동하면 세션이 날라가서 원인을 찾다보니 서버와 클라이언트의 시간이 차이가 나서 시간을 맞추는 것으로 해결을 했던 적이 있어서 막연히 클라이언트 시간도 비교를 하는 것으로 생각을 했네요.
기준이 유닉스타임이고 서버의 시간이 느리다면 클라이언트와의 비교가 아니라 유닉스타임과 서버의 타임비교로 세션이 날라가는 거네요.

위의 내용과는 상관없이 세션의 시간은 time()을 사용하기 때문에 글로벌 사이트에서 사용할 수 있습니다.
케이든 / 2009/12/29 11:43:21 / 추천 0
두분 감사합니다

복잡하네요
byung82 / 2009/12/30 19:47:20 / 추천 0
위에 답변들이 많지만 첨부하자면
 흠 어차피 session도 cookie의 일부라서 cookie가 gmt로 시간이 설정됩니다.
그래서 시간은 상관이 없습니다 ^^;