본문으로 바로가기

[PHP][CodeIgniter] Session

category PHP 4년 전
728x90
반응형

codeigniter 매뉴얼을 보고 있다가 넘 잠이 오고 한국어 번역이 안되어 있어서 잠도 깰 겸 일본어 문서를 보고 번역(직역)을 해봤다.

codeigniter.jp/user_guide/3/libraries/sessions.html

코드 이그나이터 3 세션 클래스 번역(직역)

세션은 어떻게 동작합니까?

페이지가 읽혀지면, 세션클래스는 유효한 쿠키가 유저 브라우저로부터 송신되었는지를 체크합니다.

세션 쿠키가 존재하지 않는 경우 (또는 서버에 저장되어 있는 것도 일치하는지 유효기간이 만료된 경우는) 새로운 세션이 작성되고 저장됩니다.

유효한 세션이 존재하는 경우 그 정보가 갱신됩니다. 갱신할 때마다 세션ID를 생성되도록 설정할 수도 있습니다. 

한번 초기화되면 세션클래스는 자동적으로 실행되는 것을 이해하는 것은 중요합니다. 상기 동작을 하게 하기 위해서 당신이 무엇을 할 필요는 없습니다.

이후에 적혀있듯이 세션 데이터는 사용하면서 당신이 하고 싶은 처리를 작성하는 것이 가능하지만 세션 읽기, 쓰기 갱신 프로세스는 자동적으로 실행됩니다.

CLI에 대해서는 세션클래스라이브러리는 자동적으로 정지됩니다. 세션은 오로지 HTTP 프로토콜에 근거한 개념이기 때문입니다.

병행성에 관한 주의

AJAX를 다용하고 있는 웹사이트를 개발하고 있지 않는 이상 이 섹션은 넘겨도 좋습니다. 그러나 그렇지 않은 경우 거기다 퍼포먼스 문제가 발생하고 있는 경우 이러한 주의는 딱 당신이 찾고 있는 것이겠죠.

코드 이그나이터의 이전 버전 세션은 lock을 구현하고 있지 않았습니다. 즉, 동일한 세션은 이용하는 두 개의 HTTP request는 완전 동시에 실행되고 있었습니다. 보다 적절한 전문용어로 말하자면 request는 non-blocking이었습니다.

그러나 세션을 사용하고 있는 상황에 있어서는 non-blocking 한 request는 완전하지 않다는 것도 의미했습니다. 왜냐하면 한 방향 request에 관한 세션 데이터의 갱신 ( 또는 세션 ID  재생성) 은 다른 한쪽의 동시 실행하고 있는 request의 방해가 되기 쉽기 때뭉입니다. 이것은 여러 거지 문제의 근본이 되어 코드 이그나이터 3.0에서 세션 라이브러리를 완전히 다시 쓰는 주요한 이유가 되었습니다.

왜 우리들은 일부러 이런 것을 말하고 있습니까? 그것은 이 뒤 당신이 퍼포먼스 문제의 원인을 찾으려고 해서 lock 이 문제라고 판단해서 lock을 어떻게 배제할 것인지 찾기 시작할 것이니까…

그런 짓은 하지 말아 주세요! Lock 삭제는 잘못된 것이겠죠. 그리고 보다 많은 문제가 발생합니다.

lock은 문제가 아니고 그것은 해결되지 않습니다.

당신의 문제는 당신이 이미 처리를 끝내서 이제 필요하지 않았음에도 불구하고 열어둔 세션은 가지고 있는 채로 있는 것입니다. 그래서 필요한 것은 현재 request를 위한 세션이 이미 필요 없어진 뒤 세션을 닫는 것입니다.

짧게 말하면 세션 변수를 사용이 끝낫다면 session_write_close()를 불려주세요.

세션 데이터란 무엇인가?

세션 데이터는 특정 세션 ID(쿠키)에 연결된 단순한 배열입니다.

혹시 이전부터 PHP에서 세션을 이용하고 있다면 PHP의 $_SESSION 슈퍼 전역 변수를 자세히 알고 있으시겠죠 (그렇지 않은 경우에는 이 링크의 콘텐츠를 읽어주세요)

https://www.php.net/manual/en/reserved.variables.session.php

PHP: $_SESSION - Manual

I wrote a little page for controlling/manipulating the session. Obviously, never use this on a production server, but I use it on my localhost to assist me in checking and changing session values on the fly.Again, it makes use of eval() and exposes the ses

www.php.net

 

코드 이그나이터는 세션 데이터의 접근방법을 PHP 와 같은 방법으로 제공합니다. 즉, PHP 의 세션핸들러의 구조를 사용하고 있습니다. 세션데이터 사용방법은 $_SESSION 배열을 조작(읽기, 설정 및 삭제) 하는 것과 동일하게 간단합니다.

더불어, 코드 이그나이터에는 아래에 설명하고 있는 2종류의 세션 데이터를 제공합니다. flashdata와 tempdata입니다.

NOTE

이전 버전에서는 코드이그나이터의 표준적인 세션데이터는 userdata 라고 불리고 있었습니다. 해당 용어가 매뉴얼의 다른 곳에서 사용되는 경우를 염두에 두십시오. 대부분이 커스텀 userdata 메소드가 어떻게 동작하는지를 설명하기 위해 적혀있습니다.

728x90
반응형