2010-12-06 5 views
0

나는 서블릿을 구현했으며, PHP 사이트는 그 서블릿에 액세스하여 데이터를 검색하고있다. 세션 변수를 저장하는 가장 좋은 방법이 무엇인지, 아니면 저장해야하는지 궁금합니다.JSP/서블릿 세션 + PHP : 세션 추적하기 - JSON/데이터베이스 또는 HttpSessionListener?

저장할 필요가있는 변수에는 ArrayList 및 기타 개체가 포함됩니다.

(1) HttpSessionListener을 구현하고, 각 세션을 저장 (이 만들어진 때) 정적 SessionMap로 :

나는 약 3 가능성을 생각했습니다. 그런 다음 세션이 삭제되면 삭제하십시오.

(2) JSON에 모든 것을 저장하십시오. 그래서 각 객체를 serialize/deserialize하고 앞뒤로 전달해야합니다. (각 ArrayList/Object에있는 항목 목록을 사용자 클릭 사이에서 추적하고 싶습니다.)

(3) SessionID를 기본 키로 사용하여 정보를 MongoDB에 저장합니다.

너희들은 어떻게 생각하니?

답변

0

나는 세 가지 모두의 조합을 좋아합니다.

  1. 단순함의 장점이 있습니다. 세션이있을 경우 데이터베이스에 갈 필요가 없습니다.
  2. JSON은 경량이며 브라우저의 언어입니다.
  3. 데이터베이스에 항목을 저장하고 세션 ID를 사용하여 항목을 검색하면 사용자가 세션을 시작하고 불완전한 상태로 남겨두고 나중에 다시 시작하여 중단 된 부분부터 다시 시작할 수 있습니다. 데이터베이스는 메모리 요구 사항이 커지고 복잡해지면 정보를 저장하는 좋은 방법 일 수 있습니다.

나는 그것이 독점적 인 선택이어야한다고 생각하지 않습니다.

0

여기서 HttpSessionListener은 불필요합니다. 당신은 기본적으로 서블릿에서 할 필요가있다 : 세션이 파괴받을 때

List<String> links = (List<String>) request.getSession().getAttribute("links"); 
if (links == null) { 
    links = new ArrayList<String>(); 
    request.getSession().setAttribute("links", links); 
} 
links.add(request.getParameter("link")); 

속성 어쨌든 garbaged됩니다.

JSON은 불필요한 오버 헤드 만 추가하고 데이터베이스는 웹 서버에 많은 메모리 공간이 없을 때만 유용합니다 (DB는 차례로 메모리를 어느 정도 섭취합니다).

나는 PHP와 동일한 서블릿 세션을 유지하는 방법에 대해서만 궁금해한다. 이것은 URI의 JSESSIONID 속성 (좋지 않은 아이디어)을 사용하여 서블릿을 호출하거나 컬 (curl)을 프록시로 사용하는 PHP 스크립트 (PHP로 모든 것을 수행하지 않는 이유는 무엇입니까?)를 포함합니다. 또는 동일한 도메인에서 실행 중입니까? 아니면 Quercus를 사용하여 Java servletcontainer에서 PHP를 실행하고 있습니까?