2013-01-07 6 views
0

필자는 웹 애플리케이션에서 사용자를 인증하기 위해 AuthComponent와 함께 cakephp 2를 사용하고 있습니다. 사용자가 매우 오랜 시간 동안 자동으로 로그 아웃되지 않도록하는 것이 중요합니다 (최소 24 시간 이상 또는 무한히 최선). 그 이유는 우리가 cakephp webapp에 암호를 입력하지 않고 현재 로그인 한 사용자가 몇 초 내에 사용할 수 있어야하는 많은 것들을 저장하기 때문입니다. 이러한 이유로 이미 lowSecurity.level을 설정하고 또한 어떤 그가 로그 아웃되기 전에 좋은 이일 사용자에게 제공한다고 자동 로그 아웃 금지 cakephp

Configure::write('Session.timeout', 3000); 

을 구현했습니다. 그러나 사용자가 이미 동일한 분 내에 활성화되어 있어도 때때로 로그 아웃됩니다. 나는 그것이 일어나는 때와 그것을 재현하는 방법을 정말로 모른다. 그러나 내가 무언가를 놓쳤을 지 궁금했고 다른 전략이 나의 문제를 해결하는 데 도움이 될지 궁금했다.

웹 서버로서 저는 특별한 설정 변경없이 우분투 12.04에서 표준 아파치를 사용하고 있습니다!

답변

0

이 기능을 효과적으로 사용하려면 두 부분으로 나누십시오. 사용중인 구성 요소에 대해 구체적으로 말할 수는 없지만 일반적인 작동 이론을 제공 할 수 있습니다.

PHP 세션을 오래 사용할 수없는 것으로 간주해서는 안됩니다. 사용자가 사이트에있는 동안은 활성화되지만 결국에는 정리됩니다. 그렇다면 어떻게 사용자 세션을 "만료되지 않게"할 수 있습니까?

사용자가 로그인하면 고유 한 일회성 해시를 만듭니다. 이 해시는 사용자가 쿠키로 저장하며 데이터베이스 (해시와 연결된 사용자에게)에서도 참조해야합니다.

이 해시는 다른 로그인 경로를 제공합니다. 사용자가 사이트로 돌아가서 세션이없는 경우 로그인 페이지로 이동하는 대신 사용자에게 쿠키가 있는지 확인합니다. 그럴 경우 다시 로그인 할 수 있습니다.

이제 해시가 한 번만 사용되도록하는 것이 중요합니다. 해시를 사용하여 세션을 만든 후에는 새 해시를 생성하고 쿠키와 데이터베이스를 새 해시로 업데이트해야합니다. 명심해야 할

어떤 것들은 :

  • 해시 독특하고 임의의 데이터로 생성해야한다. 은 쉽게 위조 할 수없는 것이어야합니다.
  • 사용자가 여러 장치로 사이트에 액세스하는 경우 가능한 각 장치마다 자체 고유 해시가 있으므로 데이터베이스 디자인을 염두에 두십시오.
  • 해시를 쉽게 알아볼 수 없도록 SSL을 사용하는 것이 좋습니다.
  • 이전 해시를 사용하여 사이트에 로그인 할 수 없도록 해시가 특정 시간 내에 만료되어야합니다.
+0

, 나는 매우 좋아 1 개월 세션입니다 표준 cakephp AuthComponent로 구현하기가 어려울 것입니다. 두 가지 질문 : 해시는 얼마나 오래 있어야합니까?왜 새로운 세션이 생성되면 재생성해야합니까? – schneida

+0

길이가 문제가되지 않으며 유일성과 해시를 위조하는 것이 가장 중요합니다. 'md5 ($ userid)'는 좋지 않습니다. 해시를 예측 가능하게 만듭니다. 'md5 (microtime()) '와 같은 것이 잘 작동 할 수도 있습니다. 쿠키는 클라이언트에 저장되므로 제 3자가 잠재적으로 읽을 수 있습니다. 사용자의 해시를 가져 와서 사용자 이름이나 비밀번호가 필요없이 로그인 할 수 있습니다. 해시가 재생성되어 한 번만 사용하도록 허용되면 영구 세션이있는 보안 노출이 줄어 듭니다. – datasage

+0

Mhm이므로 나쁜 사용자가 쿠키를 브라우저로 복사하면 시스템에 로그인 할 수있게되고 쿠키가 재생성되므로 쿠키가 이제는 유효하지 않으므로 정품 사용자는 로그 아웃됩니다. 잘 나는 그것이 나를 위해 충분하다라고 생각한다! 고마워! – schneida

0
CREATE TABLE cake_sessions (
    id varchar(255) NOT NULL default '', 
    data text, 
    expires int(11) default NULL, 
    PRIMARY KEY (id) 
); 

다음 core.php 변경 세션 설정에서에 :

Configure::write('Session', array(
    'defaults' => 'database', 
    'timeout' => 43200, 
    'cookieTimeout' => 43200 
)); 

이 설정이 있지만, 이것은 매우 좋은 생각이다