2009-08-25 2 views
1

내 회사의 내부 애플리케이션을위한 facelets 템플릿을 만들고 있습니다. 모양은 사용자가 선택한 스킨을 기반으로합니다 (예 : Gmail 테마).여러 WAR 파일의 쿠키

사용자가 선호하는 스킨을 쿠키에 저장하는 것이 좋습니다.

내 "사용자 환경 설정"WAR에서이 쿠키를 볼 수 있습니다. 그러나 내 다른 응용 프로그램은 쿠키를 찾을 수 없습니다. 사용자 기본 설정 WAR와 동일한 도메인/하위 도메인에 있습니다.

여기에는 몇 가지 이유가있을 수 있습니까?

여기는 선호하는 스킨을 만들거나 찾는 데 사용되는 빈입니다. 이 동일한 파일은 모든 프로젝트에서 사용됩니다.

// BackingBeanBase is just a class with convenience methods. Doesn't 
// really affect anything here. 
public class UserSkinBean extends BackingBeanBase { 

    private final static String SKIN_COOKIE_NAME = "preferredSkin"; 

    private final static String DEFAULT_SKIN_NAME = "classic"; 


    /** 
    * Get the name of the user's preferred skin. If this value wasn't set previously, 
    * it will return a default value. 
    * 
    * @return 
    */ 
    public String getSkinName() { 

     Cookie skinNameCookie = findSkinCookie(); 

     if (skinNameCookie == null) { 
      skinNameCookie = initializeSkinNameCookie(DEFAULT_SKIN_NAME); 
      addCookie(skinNameCookie); 
     } 

     return skinNameCookie.getValue(); 

    } 


    /** 
    * Set the skin to the given name. Must be the name of a valid richFaces skin. 
    *  
    * @param skinName 
    */ 
    public void setSkinName(String skinName) { 

     if (skinName == null) { 
      skinName = DEFAULT_SKIN_NAME; 
     } 

     Cookie skinNameCookie = findSkinCookie(); 

     if (skinNameCookie == null) { 
      skinNameCookie = initializeSkinNameCookie(skinName); 
     } 
     else { 
      skinNameCookie.setValue(skinName);  
     } 

     addCookie(skinNameCookie); 
    } 

    private void addCookie(Cookie skinNameCookie) { 
     ((HttpServletResponse)getFacesContext().getExternalContext().getResponse()).addCookie(skinNameCookie); 
    } 

    private Cookie initializeSkinNameCookie(String skinName) { 

     Cookie ret = new Cookie(SKIN_COOKIE_NAME, skinName); 
     ret.setComment("The purpose of this cookie is to hold the name of the user's preferred richFaces skin."); 

     //set the max age to one year. 
     ret.setMaxAge(60 * 60 * 24 * 365); 
     ret.setPath("/"); 
     return ret; 
    } 


    private Cookie findSkinCookie() { 
     Cookie[] cookies = ((HttpServletRequest)getFacesContext().getExternalContext().getRequest()).getCookies(); 

     Cookie ret = null; 
     for (Cookie cookie : cookies) { 
      if (cookie.getName().equals(SKIN_COOKIE_NAME)) { 
       ret = cookie; 
       break; 
      } 
     } 

     return ret; 
    } 
} 

내가 잘못하고있는 것을 누구든지 볼 수 있습니까?

업데이트 : 나는 조금 좁혔습니다 ... FF로 잘 작동하지만 IE는 여전히 그것을 좋아하지 않습니다.

감사합니다, 잭

답변

0

(도메인이 점으로 시작해야합니다).

방금 ​​클라이언트 측에서 javascript를 사용하여 쿠키를 만들었습니다.

괜찮 았습니다.