문제

Codeigniter에서 이것을 어떻게 구현합니까?

도움이 되었습니까?

해결책

(이 답변은 원래 질문에 대한 응답이었습니다)

어떻게 하시겠습니까? 아니면 다른 사람들보다 만료일이 더 긴 세션을 어떻게 만들겠습니까?

생성 된 모든 세션은 구성 파일 (기본값 : 7200 초)에서 동일한 $ config [ 'sess_expiration']를 사용하고 사용자 정의 값을 전달하는 방법이 있습니까?

쿠키가 만료되는 것은 "Remember Me"기능에 대해 작동하지 않을 것입니다. 사용자는 브라우저를 닫을 때 세션 쿠키를 잃어 버리기 때문입니다. Code Igniter에 기본 "Remember Feature"가 없으면 서버가 다시 볼 때 자동 로그인 할 수있는 정보가 포함 된 장기 쿠키를 삭제하기 위해 무언가를 작성해야합니다.

좋은 기사가 있습니다 영구 로그인 쿠키 모범 사례, 다음과 같이 요약 할 수 있습니다.

  1. 사용자가 기억에 성공적으로 로그인하면 표준 세션 관리 쿠키 외에 로그인 쿠키가 발행됩니다.2
  2. 로그인 쿠키에는 사용자의 사용자 이름과 적절한 넓은 공간에서 임의의 숫자 (여기에서 "토큰")가 포함되어 있습니다. 사용자 이름과 토큰은 데이터베이스 테이블에 쌍으로 저장됩니다.
  3. 로그인이 아닌 사용자가 사이트를 방문하여 로그인 쿠키를 제시하면 데이터베이스에서 사용자 이름과 토큰이 조회됩니다. 1. 쌍이있는 경우 사용자는 인증 된 것으로 간주됩니다. 중고 토큰은 데이터베이스에서 제거됩니다. 새 토큰이 생성되고 사용자 이름이 포함 된 데이터베이스에 저장되고 새 로그인 쿠키를 통해 사용자에게 발행됩니다. 2. 쌍이 존재하지 않으면 로그인 쿠키가 무시됩니다.
  4. 이 메커니즘을 통해서만 인증 된 사용자는 암호 변경, 개인 식별 정보보기 또는 돈을 쓰는 것과 같은 특정 보호 정보 또는 기능에 액세스 할 수 없습니다. 이러한 작업을 수행하려면 먼저 일반 사용자 이름/비밀번호 로그인 양식을 성공적으로 제출해야합니다.
  5. 이 접근법을 사용하면 사용자가 다른 브라우저 나 컴퓨터에서 여러 기억에 걸린 로그인을 가질 수 있으므로 사용자가 단일 작업에서 기억 된 모든 로그인을 지우는 메커니즘이 제공됩니다.

해당 아이디어에 더 많은 보안을 구축하는 또 다른 기사 개선 된 영구 로그인 쿠키 모범 사례

해당 기사의 관행을 따르면 멀리 잘못되지 않을 것입니다!

다른 팁

'개선 된 영구 로그인 쿠키 모범 사례'에서 제안을 재고 할 수 있습니다. 문제에 대한 분석을 사이트에 게시했지만 요점은 다음과 같습니다.

안전한 라인 없이는 쿠키 도둑질을 방해 할 수 없습니다. 무슨 일이 있어도

( *'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');
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top