2011-01-02 3 views
0

쿠키가 포함되지 않은 일부 PHP 앱에 기본 로그인 시스템을 구현하고 싶습니다. 즉, 사용자가 브라우저를 닫고 로그인이 만료되면 브라우저 세션 동안 (또는 사용자가 명시 적으로 로그 아웃 한 경우) 활성 상태로 유지됩니다.언제 어떻게 PHP로 계정 액세스 로그인을 로그합니까?

나는이 모든 활동을 기록하고 싶습니다. 사용자가 페이지를 새로 고침하거나 다른 링크를 열거 나 로그 아웃 할 때마다 그 사용자가 마지막으로 액세스 한 시간을 기록하고 이전 액세스를 덮어 쓰며 로그.

하지만 내 문제는 마지막 레코드를 덮어 쓰지 않고 다른 레코드를 데이터베이스에 삽입해야하는시기입니다.

시간 제한을 정의해야하며 해당 시간 초과보다 마지막으로 액세스 한 경우 다른 로그를 데이터베이스에 삽입해야합니까? 그 타임 아웃 후에도 세션이 만료되어야합니까?

더 좋은 방법이 있습니까?

이상적으로 브라우저를 닫을 때 "로그 아웃 동작"을 기록하고 싶습니다. 그러나 거기에 감지 할 수있는 방법이 없다고 생각합니까?

제안 사항?

+1

자바 스크립트로 브라우저 닫힘 이벤트를 기록 할 수 있습니다. 브라우저가 실제로 닫히기 전에 db 항목을 쓸 스크립트를 요청하십시오. 그러나 이것은 정말로 훌륭하고 완벽하게 호환되는 해결책이 아닙니다. 또 다른 방법은 제한 시간을 정의하고 cronjob ('session timeout'긴 간격으로 실행)을 만들어 닫힌 세션 로그로 db를 업데이트하는 것입니다. –

답변

1

이미 서버 측 시간 초과에 대해 언급했기 때문에 여기 내 대답을 약간 수정하십시오. 당신이 클라이언트 측을 할 수

있는 유일한 방법은 로그 아웃 페이지를 호출입니다 onbeforeunload 이벤트를 사용하는 것입니다 (사용자가 문서에있는 링크를 클릭하지 않은 경우 ..)

불행하게도, 브라우저 뒤로, 앞으로, 새로 고침 버튼을 누르면 로그 아웃이 발생합니다 ...
logout.php (자동 로그 아웃 페이지)를 20-30 초 동안 잠자기 상태로 유지 한 다음 마지막 인상이 30-45 초 미만인지 확인하십시오 로그 아웃하십시오 ...

문서 머리 부분에있는 스크립트 태그에 이것을 추가하고 'logout.php'를 원하는대로 변경하십시오. * 링크 이외의 항목을 사용할 경우 onclick 처리기를 올바르게 추가하려면 window.onload 함수를 편집해야 할 수도 있습니다. dologout 플래그가 true의 경우

var xmlhttp=false; var target; var combo; 
/*@cc_on @*/ 
/*@if (@_jscript_version >= 5) 
try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } 
catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } 
@end @*/ 
if (!xmlhttp && typeof XMLHttpRequest!='undefined') { 
    xmlhttp = new XMLHttpRequest(); 
} 
var dologout = true; 
var logouturl = 'logout.php'; 
window.onbeforeunload = function() { 
    if (dologout) { 
     xmlhttp.open("POST", logouturl, true); 
     xmlhttp.send(null); 
    } 
} 
window.onload = function() { 
    for (i=0;i<document.links.length;i++) 
    document.links[i].setAttribute("onclick","dologout = false;"); 
} 

는 본질적으로 이것은 단지

... 모든 document.links에 onclick 이벤트를 부착하고 문서 링크를 클릭 한 경우 false로 'dologout'플래그를 변경할 때 onbeforeunload 이벤트가 발생하면 'logouturl'/ 'logout.php'에 게시물을 보냅니다 ...

+0

그게 내가 질문에서 말한 것입니다 ... –

-1

브라우저를 닫을 때 가치가있는 작업을 실행할 수있는 방법이 없습니다. http://www.webdeveloper.com/forum/showthread.php?t=93810이 링크에서 사용자가 비슷한 질문을하고 질문을했는데 내가 갖고있는 것으로 의심됩니다. 사용자가 웹 페이지를 떠날 때마다 사이트를 떠나는 것처럼 간주되어 로깅을 방해합니다. 활동. 나는 쿠키를 사용하여 자주 만료 시키게됩니다. 귀하의 사이트에서 몇 가지 유용한 조치를 취할 때마다 사용자 조치를 기록하십시오. 예를 들어, 링크를 클릭하고 컨텐츠를 읽는 데 소요되는 시간을 줄입니다.

2

여기 실제 문제는 다른 것입니다. 왜 이것을 필요로합니까? 내말은.그것은 매우 쉽게 나에게 보인다

  1. 당신은 당신의 웹 사이트 페이지를 가지고 session::recordAction() 같은 최초의 라인 뭔가를하고 데이터베이스에 연결하는 방법 내부에 추가하고 기본 기능입니다 time()에서 나오는 타임 스탬프를 기록합니다. 디자인 환경 설정 및 스키마를 기반으로하므로 데이터베이스에 해당 필드를 배치 할 위치는 실제로 중요하지 않습니다.
  2. 당신은 사용자가 마지막에 온라인 있었다면 알고 싶어 할 때의 10 분 당신이이 타임 스탬프 (데이터베이스 및 time()에 기록 된 하나)을 비교할 수라고하자 말을 뭔가 같은 :

    (세션 :: getLastAction() < 10 * $ 분) {/ * 여기에 멋진 것들 * /}

  3. 보안 문제 등으로 인해 복구 할 작업 로그를 기록하는 경우 타임 스탬프는 사용자가 마지막으로 페이지를 새로 고친 시간을 의미합니다. 그리고이 경우에는 .txt 파일을 사용하여 기록하고 i.p를 기록하도록 권합니다. 그리고 그 사용자로부터 복구 할 수있는 모든 데이터. 따라서 아무런 이유없이 데이터베이스를 과도하게 사용하지 않습니다.

다른 사람들을 위해이 시스템을 구축하려는 경우 알려 주시면이 방법으로 모든 문제를 해결하는 방법을 알려 드리겠습니다.

실제로 정말 그들은 단지 웹 사이트를 떠나, 로그 아웃 버튼을 누르면 그 꽤 아무도 기억하지 않는다. 그리고 그들이 웹 사이트를 떠나는 경우 실제로 그것을 알 수있는 방법이 없습니다. 사실 그들은 그들이 서버에 페이지를 요청하고 있지 않다는 것입니다. 1. 그들이 웹 사이트를 떠난 경우 또는 2. 웹 페이지를 읽고 리프레시하지 않은 경우.

공지 사항

내가 잘못 당신이 로그인 시스템을 만드는 몇 가지 방법을 찾고있어하지 않았고 쿠키에 대해 우려하고있는 경우 :

  • 쿠키 사용 기본적으로 (만료 setcookie())를 입력하십시오. 과거의 타임 스탬프를 설정하여 삭제할 수 있으며 매우 긴 날짜를 영원히 살게 할 수 있습니다. 그들은 매우 유용하며 여전히 많은 사람들이 사용합니다.
  • 세션이 24 분 또는 22 분 동안 사용되지 않으면 세션이 만료됩니다 (확실하지 않으면 google).

설명을 요청하는 것이 아니라면 이해할 수 있기를 바랍니다. :)

+0

왜 사용자가 모든 응답에 대해 투표를했는지 물을 수 있습니까? – Shoe

관련 문제