2009-08-25 22 views
1

Я создаю шаблон facelets для всех внутренних приложений моей компании. Его внешний вид основан на скине, который пользователь выбирает (например, темы gmail).Файлы cookie через несколько файлов WAR

Имеет смысл хранить предпочтительную кожу пользователя в файле cookie.

Мои «пользовательские предпочтения» WAR могут видеть этот файл cookie. Однако мои другие приложения не могут найти файл cookie. Они находятся в том же домене/поддомене, что и пользовательские предпочтения 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 все равно не нравится (конечно).

Спасибо, Zack

ответ

0

Я нашел решение.

Я просто использовал javascript на стороне клиента для создания файлов cookie.

Это сработало отлично.

0

Я думаю, вам нужно назначить домен/поддомен для печенья.

Мол, (Обратите внимание, что домен должен начинаться с точки)

ret.setDomain(".test.com"); 
ret.setDomain(".test.co.uk"); 

http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/Servlet-Tutorial-Cookies.html

+0

Это не помогло. Я нахожусь в том же домене. Я также попытался установить путь к «/», и это не сделало этого. –

Смежные вопросы