2010-04-06 1 views
2

게시/액션 규칙 당 5 분을 집행하는 방법을 파악하려고합니다.자바의 세션 개체에 포스트 규칙 당 5 분을 적용하는 방법은 무엇입니까?

Java Wicket을 사용하여 웹 응용 프로그램을 개발 중이며 사용자별로이 타이머를 추적하는 데 사용할 세션 클래스가 있습니다. 나는 타임 스탬프를 데이터베이스에 저장할 계획이 없었습니다.

나는 세션 클래스에서 아래의 메소드를 얻었으며, 이제는 사용자가 마지막으로 게시 한 시간과 현재 시간 사이에 5 분의 차이점이 있는지 확인하고 저장하는 방법을 알아 내려고 노력 중입니다.

java.util.Date가이 작업에 적합하다고 가정하면 두 가지 작업의 차이를 몇 분 만에 얻는 방법은 무엇입니까? 클라이언트가 단순히/로그인 로그 아웃 또는 (쿠키를 삭제하거나 웹 브라우저를 다시 시작) 새 세션을 얻기 위해 세션을 쓰레기 수 있기 때문에

public boolean isAllowedToPost() { 
    if(null OR has 5 minutes passed since last post) { 
     // set the new timestamp  
     return true;  
    } 
    else 
    { 
     return false; 
    } 
} 
+0

은 일반적으로 "그것을 잘못을하지 않는다"보다 더 특정의 코드를 작성하는 하나의 "오른쪽"방법이 없다 ; 여기 정확히 물어보고 싶은게 뭐죠? – Amber

+0

"올바른 길"이 당신을 쫓아 버리면 유감입니다. 내가 묻는 것은이 질문의 제목에서 내가 설명한 것을 어떻게 성취 하는가? 예를 들어, Date 객체를 저장하고 5 분 이상의 시간 차이가 있는지 확인하기 위해이 객체를 빼는 방법은 무엇입니까? 각 세션에 하나의 Date 객체를 저장하는 것이 과도하다고 생각하십니까? – John

답변

2

가장 강력한 방법은, 데이터베이스의 타임 스탬프를 저장하는 것입니다.

어떤 식 으로든 세션에 저장하려고한다면, post() 동안 타임 스탬프를 설정하고 isAllowedToPost()의 비교 자료로 사용하는 것이 좋습니다. 현재 시간 소인은 System#currentTimeMillis()까지 얻을 수 있습니다. java.util.Date은 필요 없습니다.

킥오프 예 (이 모든 콩이 있다고 가정 세션 범위) :

private static final long MAX_WAIT_FOR_POST = 300000L; // ..ms = 5 minutes. 
private long lastPost; // Defaults to 0 anyway. 

public void post() { 
    lastPost = System.currentTimeMillis(); 
    // ... 
} 

public boolean isAllowedToPost() { 
    return (lastPost + MAX_WAIT_FOR_POST) < System.currentTimeMillis(); 
} 
+0

감사합니다. BalusC. 세션에 저장하지 않고 데이터베이스에 타임 스탬프를 저장해야하는 이유에 대한 의견을 보내 주시면 감사하겠습니다. 아직 데이터베이스 연결을 설정하지 않았으므로 당분간 세션에 저장해야합니다. 다시 한 번 감사드립니다. – John

+0

당신을 진심으로 환영합니다. – BalusC