Codeigniter에 로그인 한 '기억'
-
05-07-2019 - |
문제
Codeigniter에서 이것을 어떻게 구현합니까?
해결책
(이 답변은 원래 질문에 대한 응답이었습니다)
어떻게 하시겠습니까? 아니면 다른 사람들보다 만료일이 더 긴 세션을 어떻게 만들겠습니까?
생성 된 모든 세션은 구성 파일 (기본값 : 7200 초)에서 동일한 $ config [ 'sess_expiration']를 사용하고 사용자 정의 값을 전달하는 방법이 있습니까?
쿠키가 만료되는 것은 "Remember Me"기능에 대해 작동하지 않을 것입니다. 사용자는 브라우저를 닫을 때 세션 쿠키를 잃어 버리기 때문입니다. Code Igniter에 기본 "Remember Feature"가 없으면 서버가 다시 볼 때 자동 로그인 할 수있는 정보가 포함 된 장기 쿠키를 삭제하기 위해 무언가를 작성해야합니다.
좋은 기사가 있습니다 영구 로그인 쿠키 모범 사례, 다음과 같이 요약 할 수 있습니다.
- 사용자가 기억에 성공적으로 로그인하면 표준 세션 관리 쿠키 외에 로그인 쿠키가 발행됩니다.2
- 로그인 쿠키에는 사용자의 사용자 이름과 적절한 넓은 공간에서 임의의 숫자 (여기에서 "토큰")가 포함되어 있습니다. 사용자 이름과 토큰은 데이터베이스 테이블에 쌍으로 저장됩니다.
- 로그인이 아닌 사용자가 사이트를 방문하여 로그인 쿠키를 제시하면 데이터베이스에서 사용자 이름과 토큰이 조회됩니다. 1. 쌍이있는 경우 사용자는 인증 된 것으로 간주됩니다. 중고 토큰은 데이터베이스에서 제거됩니다. 새 토큰이 생성되고 사용자 이름이 포함 된 데이터베이스에 저장되고 새 로그인 쿠키를 통해 사용자에게 발행됩니다. 2. 쌍이 존재하지 않으면 로그인 쿠키가 무시됩니다.
- 이 메커니즘을 통해서만 인증 된 사용자는 암호 변경, 개인 식별 정보보기 또는 돈을 쓰는 것과 같은 특정 보호 정보 또는 기능에 액세스 할 수 없습니다. 이러한 작업을 수행하려면 먼저 일반 사용자 이름/비밀번호 로그인 양식을 성공적으로 제출해야합니다.
- 이 접근법을 사용하면 사용자가 다른 브라우저 나 컴퓨터에서 여러 기억에 걸린 로그인을 가질 수 있으므로 사용자가 단일 작업에서 기억 된 모든 로그인을 지우는 메커니즘이 제공됩니다.
해당 아이디어에 더 많은 보안을 구축하는 또 다른 기사 개선 된 영구 로그인 쿠키 모범 사례
해당 기사의 관행을 따르면 멀리 잘못되지 않을 것입니다!
다른 팁
'개선 된 영구 로그인 쿠키 모범 사례'에서 제안을 재고 할 수 있습니다. 문제에 대한 분석을 사이트에 게시했지만 요점은 다음과 같습니다.
안전한 라인 없이는 쿠키 도둑질을 방해 할 수 없습니다. 무슨 일이 있어도
( *'Secure Line'에 의해, 나는 SSL / VPN 터널링 / 공개 키 암호화 또는 강력한 챌린지 응답 체계를 의미합니다.
나는 영구적 인 로그인 모범 사례를위한 것이지만, 많은 속임수가 도움이되지 않는 지점과 어디에 뿐 길은 SSL입니다.
솔루션에 감사드립니다. CI 프로젝트에 이것을 구현했습니다.
uv note : 쿠키는 기억력이있는 키로 고안된 호쉬를 가져야합니다. - 사용자 ID를 저장하지 마십시오) - 비밀번호를 저장하지 말고 암호 해시를 저장하지 마십시오. 그렇게하면 사람들이 자동으로 계정에 로그인 할 수 없습니다.
최악의 시나리오 : 해커가 해시 방법을 발견하자마자 한 곳에서 주요 생산자 기능을 조정할 수 있으며 보안으로 다시 설정됩니다. 소금과 후추 줄을 조정하겠습니다.
도움이되기를 바랍니다. Chris D.- 호주에서 :)
이러한 것에 대해 모든 클래스의 CI 변수는 자체 라이브러리에서 액세스 할 수 있습니다.
예를 들어:
$this->session->sess_expiration = 500000;
문제를 해결하기를 바랍니다.
github에 라이브러리가 있습니다.
이 라이브러리의 setCookie () 함수를 사용하면 다음이 발생합니다.
1. 쿠키는 고유 한 숫자를 포함하는 쿠키가 생성됩니다.
2. verifyCookie () 함수를 브라우저의 쿠키 해시라고 할 때 해시가 데이터베이스와 일치해야합니다. 그렇다면 verifyCookie ()가 홈페이지에서 진정으로 반환합니다.
로드 세션 전에 conf를 설정해야합니다
$do_not_remember = (boolean) $this->input->post('do_not_remember');
if ($do_not_remember) {
$this->config->set_item('sess_expiration', 0);
$this->config->set_item('sess_expire_on_close', true);
}
$this->load->library('session');