2012-02-17 9 views
1

내 컨트롤러의 많은 기능은 다음과 같습니다. 세션이 만료되어 이와 같은 기능이 호출 될 때 CI로 취할 수있는 가장 좋은 방법은 무엇입니까?만료 된 세션 처리

$this->foo_model->create_bar($this->session->userdata('userid'), $bookId); 
+0

* 내 컨트롤러에 많은 기능이 있습니다 ... * 즉시 DRY (반복하지 말 것) 패러다임을 따르지 않는다고 제안합니다. 이 논리를 한 자리에 둘 수 있어야합니다. 컨트롤러 상속을 사용하여 Mother Controller가 세션 처리를 검토하고 개별 컨트롤러가 필요하지 않도록하십시오. [이 게시물을 참조하십시오] (http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-base-Classes-Keeping-it-DRY) –

답변

3

내가 완전히 어쩌면 질문을하지 않지만, 당신이 만료 된 세션 $this->session->userdata('something')를 호출 할 때 단순히 FALSE를 반환합니다.

그래서 가장 좋은 방법은 변수가 거짓이 아닌지 확인하는 것입니다. 원하는 값이 아닐 수있는 다른 변수와 마찬가지로 :

언제, 어떻게 할 것인지는 디자인에 따라 크게 달라집니다. 동일한 검사를 항상 수행해야하는 경우 라이브러리 또는 모델의 기능으로 만들 수 있으므로 코드를 한 번 작성하고 해당 메소드를 호출하면됩니다. 당신이 그것을 생성자에 넣는 것을 고려할 수도 있고, @Jordan Arsenault가 제안한 것보다 먼저 할 일이 필요하다면, 검사를하는 부모 MY_Controller를 생성하면 모든 정규 컨트롤러가이를 확장합니다. 실제로 이것은 아키텍처에 따라 다르며 이에 대한 충분한 정보를 제공하지 않았습니다.

모든 내가 말할 수는 항상 당신의 방법 오류 tolerants을 코드의 나머지 부분을 공급하기 전에 올바른 값을 확인하다 (만료 된 세션은 워크 플로우를 나누기 경우)

0

당신은 만료 된 세션을 회복하기 위해 쿠키를 사용할 수 있습니다 예를 들어 사용자가 응용 프로그램에 로그인 할 때 사용자에 대한 토큰을 만들 수 있습니다.이 토큰에는 응용 프로그램이 전역 적으로 알고있는 사용자 아이디가 있으며 토큰이 포함 된 사용자 컴퓨터에 쿠키를 저장합니다. 세션이 만료 될 때 클라이언트 요청 쿠키가 있는지 확인하고이 쿠키가 사용 가능한지 확인한 후 해당 userid가 세션을 다시 생성하십시오. 사용 가능한 토큰이 없으면 사용자에게 페이지를 리디렉션하여 무슨 일이 일어 났는지 알려주고 다시 로그인하도록 요청하십시오. 사용자가 로그 아웃하면 토큰과 쿠키가 삭제됩니다.

+0

그래,하지만 쿠키가 없으면 위의 코드는 아마 오류, 그래서 이것이 문제의 해결책이라고 생각하지 않습니다. – Mischa

+0

쿠키가 없거나 쿠키가 클라이언트 측에서 활성화되지 않았다면 사용자에게 어떤 일이 일어 났는지 알려주고 다시 로그인하도록 요청해야합니다. – Beatles1692

+0

죄송합니다. 내가 논평 한 이유는 쿠키에 세션을 지속시키는 것이 관련되어 있다고 생각했지만 질문에는 대답하지 않는다는 것입니다. – Mischa