Avatar billede roo104 Nybegynder
09. juni 2004 - 20:30 Der er 9 kommentarer og
1 løsning

Flere værdier i en cookie

Er det ikke muligt at gemme flere værdier i samme cookie, jeg ved man kan i ASP, men så vidt jeg kan se kan man kun have en!
Kan man og i såfald hvordan ?
Avatar billede jakobdo Ekspert
09. juni 2004 - 20:44 #1
Du kan vel kalde funktioen til at sætte en cookie flere gange?

F.eks:
<%
      Cookie mycookiea = new Cookie("aName","aValue");
      Cookie mycookieb = new Cookie("bName","bValue");
      Cookie mycookiec = new Cookie("cName","cValue");

      response.addCookie(mycookiea);
      response.addCookie(mycookieb);
      response.addCookie(mycookiec);

%>

Kender dog ikke til JSP!
Avatar billede roo104 Nybegynder
09. juni 2004 - 20:47 #2
Men det vil stadig give mig 3 cookies
Avatar billede arne_v Ekspert
09. juni 2004 - 20:50 #3
gem en værdi
  aValue + "#" + bValue + "#" + cValue

Og når du henter værdien så parser du den:
  String[] values = onevalue.split("#");
Avatar billede roo104 Nybegynder
09. juni 2004 - 20:54 #4
er det den eneste måde ?
Også lidt trist med et array der kan man ikke spørge direkte på en værdi.
Max størrelsen på en cookie er 4kb ik ?
Avatar billede arne_v Ekspert
10. juni 2004 - 21:28 #5
Nu har jeg lige læst hvad ASP gør.

Den gemmer:
  key1=value1&key2=value2

Og det kan du jo også gøre.

Her er min SuperCookie klasse lavet til formålet:

import java.util.*;

import javax.servlet.http.*;

public class SuperCookie {
    private String name;
    private Map store;
    public SuperCookie(String name) {
        this.name = name;
        store = new HashMap();
    }
    public SuperCookie(Cookie ck) {
        this.name = ck.getName();
        store = new HashMap();
        String value = ck.getValue();
        String[] pairs = value.split("&");
        for(int i = 0; i < pairs.length; i++) {
            String[] parts = pairs[i].split("=");
            store.put(parts[0], parts[1]);
        }
    }
    public void add(String key, String value) {
        store.put(key,value);
    }
    public String get(String key) {
        return (String)store.get(key);
    }
    public Cookie getCookie() {
        StringBuffer values = new StringBuffer("");
        Iterator it = store.keySet().iterator();
        while(it.hasNext()) {
            if(values.length() > 0) {
                values.append("&");
            }
            String key = (String)it.next();
            String value = (String)store.get(key);
            values.append(key + "=" + value);
        }
        return new Cookie(name, values.toString());
    }
}
Avatar billede jakobdo Ekspert
10. juni 2004 - 21:32 #6
Arne_V, slapper du aldrig af? :o)
Du er her, der og alle vegne! (og bedst af alt, du har altid gode svar, eller finder dem) SUPER!
Avatar billede arne_v Ekspert
10. juni 2004 - 21:38 #7
Nu slapper jeg af på E

:-)
Avatar billede roo104 Nybegynder
10. juni 2004 - 22:08 #8
Jeg tester den lige lidt senere, i mellemtiden kan du jo smide et svar, det ser fantastisk ud :-)
Avatar billede arne_v Ekspert
10. juni 2004 - 22:21 #9
Det er bare en simpel klase til at add'e flere værdier og returnere en normal cookie.

Og til at pakke en normal cookie ind i og hente de enkelte værdier ud igen.
Avatar billede roo104 Nybegynder
11. juni 2004 - 20:00 #10
Det virker bare perfect :-)
Noger koder der bruger det, kunne se sådan her ud.
Har bare kaldt klassen for CookieUtil.

Cookie[] cookies = request.getCookies();
Cookie cookie = null;

// Prøver at henter den ønskede cookie ind
if (cookies != null) {
    for (int i = 0; i < cookies.length; i++) {
        if ((cookies[i].getName()).equals("tid"))
            cookie = (Cookie)cookies[i];
    }
}
CookieUtil cu = null;

if (cookie == null)
    cu = new CookieUtil("tid");
else
    cu = new CookieUtil(cookie);

// Tilføjer noget data og laver ny cookie, da maxAge skal sættes.
// Cookien sendes til klienten
cu.add( request.getParameter("nummer"),Long.toString( System.currentTimeMillis() ) );
cookie = cu.getCookie();
cookie.setMaxAge(60*60*24*31);
response.addCookie(cookie);
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester