Avatar billede mr_mudderkode Nybegynder
11. juli 2002 - 08:25 Der er 18 kommentarer og
1 løsning

Bestem udløb af cookie

Her kan man se hvordan man sætter cookies v.hj.a. setRequestProperty

http://javaalmanac.com/egs/java.net/SendCookie.html

Mit problem er så, hvordan sætter jeg tid på en cookie?

(Nej, jeg kan ikke bruge Cookie klassen som har en setMaxAge metode. Jeg kan ikke gøre brug af HttpServletResponse objektet.)
Avatar billede mr_mudderkode Nybegynder
11. juli 2002 - 08:31 #1
Eller for den sags skyld LÆSER udløbstiden for en cookie...?
Avatar billede disky Nybegynder
11. juli 2002 - 08:44 #2
I java's J2EE API er der metoder til at håndterer Cookie's alene.

Men det afhænger selvfølgelig af om vi snakker, client eller server applicationer.

På en server application siger du f.eks.:
Cookie cookie=new Cookie("Felt1","Hej med dig");
cookie.setMaxAge(10000); //er foraeldet om 10000 sekunder
response.addCookie(cookie);
Avatar billede disky Nybegynder
11. juli 2002 - 08:45 #3
Hvis det er fra client siden, mener jeg du kan adde et felt til cookien der f.eks. hedder:

expires=Fri, 12 Jul 2002 10:00:00 GMT

Så udløber den imorgen
Avatar billede mr_mudderkode Nybegynder
11. juli 2002 - 08:56 #4
Som allerede nævnt kan jeg IKKE gøre brug Cookie klassen.
Derfor har jeg ikke adgang til Cookie klassens setMaxAge metode.

Jeg befinder mig i en proxy-servlet, der skal agere mellemled mellem en browser og så et antal sider. Hvis så browseren har en cookie, skal jeg i forbindelsen til den enkelte side sætte denne cookie - inklusive udløbstid. Til dette bruger jeg URLConnection.
Avatar billede mr_mudderkode Nybegynder
11. juli 2002 - 09:04 #5
Som allerede beskrevet, så har jeg IKKE adgang til hverken request, response eller Cookie objekter.

Forespørgslen bliver foretaget FRA en servlet ud til en anden side, og her skal jeg medsende cookies der er modtaget fra browseren der kaldte servletten.
Avatar billede disky Nybegynder
11. juli 2002 - 09:10 #6
så gør som jeg siger i svar #2.

Det er jo altid browseren der spørger serveren om en side, og cookie's sendes automatisk med.

I en servlet har du adgang til HttpServletResponse objectet.

Du kan IKKE fra en servlet uden forudgående request sende en webside, push teknologien er aldrig blevet anvendelig på denne måde.

Men som sagt brug svar #2
Avatar billede disky Nybegynder
11. juli 2002 - 09:11 #7
dooh, undskyld jeg misforstod lige den ide med servletten.

Men stadigvæk svar #2 kan bruges.
Avatar billede mr_mudderkode Nybegynder
11. juli 2002 - 09:16 #8
Nej. Ikke som jeg ser det.

Jeg sætter en cookie med en URLConnection conn
conn.setRequestProperty("Cookie", "name=value")

Der er ingen metode der sætter udløbstidspunktet for cookien.
Avatar billede disky Nybegynder
11. juli 2002 - 09:20 #9
jo der er, som jeg skrev sætter du 'expires' til noget.

prøv med:
conn.setRequestProperty("Cookie", "expires=Fri, 12 Jul 2002 10:00:00 GMT")

Udløbstiden på en cookie er bare et værdi felt i cookien.
Avatar billede mr_mudderkode Nybegynder
11. juli 2002 - 09:26 #10
Og hvad så hvis du har flere cookies?
Avatar billede mr_mudderkode Nybegynder
11. juli 2002 - 09:26 #11
I øvrigt mener jeg det i så fald skal hedde MaxAge ?
Avatar billede disky Nybegynder
11. juli 2002 - 09:32 #12
hvis du har flere cookies, gør du det bare for dem alle sammen.

Du kan også sætte en 'max-age' som er antal sekunders levetid fra oprettelses tidspunktet.
Eller du kan sætte 'expires' med en specificeret dato.

Hvis du vil vide mere om Cookie's så læs RFC-2109
http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2109.html
Avatar billede mr_mudderkode Nybegynder
11. juli 2002 - 10:04 #13
Jeg kan ikke hitte mening i det du skriver. Når der sættes værdier med setRequestProperty, må der kun eksistere EN variabel af et givent navn. Eksisterer det i forvejen bliver det overskrevet.
Altså kan jeg ikke lave
conn.setRequestProperty("Cookie", "expires=Fri, 12 Jul 2002 10:00:00 GMT")
for hver cookie. Dertil mener jeg at Cookie attributten skal bruges til at sætte navn=værdi for cookien
Avatar billede disky Nybegynder
11. juli 2002 - 10:10 #14
Selvfølgelig kan du kun have en værdi i en cookie per navn.
En cookie attribute er jo netop et key/value pair.

En site har en cookie, der indeholder flere key/value pairs.

Læs som sagt RFC'en den beskriver med 100% nøjagtighed hvad cookies egentligt er for nogle størrelser og hvad de har af key/value par.
Avatar billede mr_mudderkode Nybegynder
11. juli 2002 - 10:14 #15
Ja, men den beskriver ikke hvordan jeg sætter det op med en URLConnection i Java. :-/
Avatar billede disky Nybegynder
11. juli 2002 - 10:19 #16
har du prøvet:
conn.setRequestProperty("Cookie", "max-age=10000; name2=value2");
Avatar billede mr_mudderkode Nybegynder
11. juli 2002 - 10:22 #17
tæt på... Jeg har prøvet
conn.setRequestPropterty("Cookie", "name=value; Max-Age=3600");

To no avail what so ever. :-(
Avatar billede mr_mudderkode Nybegynder
11. juli 2002 - 10:32 #18
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGH!!!!

JEG BLIVER ÅNDSSVAG!

JEG ER 75% DUMMERE END EN HALV KVADRATMETER TØRT BØLGEPAP!!!

Jeg har lavet en lille servlet som jeg tester min cookie-servlet op mod. Den viser så de cookies der modtages, og hvilke cookies den forsøger at sætte. På et tidspunkt har jeg uforvarende fået introduceret en fejl, så den ikke viser noget som helst. :-(

Det er sandsynligvis virket helt fra starten af. Fedt nok. Det har kun taget mig lidt over tre timer. :-(

Smid et svar, og du får pointene for dit arbejde.
Avatar billede disky Nybegynder
11. juli 2002 - 10:41 #19
Bare roligt det er menneskeligt at fejle.

Og tro mig jeg kender det kun alt for godt :-)

Det glæder mig du har fået det til at virke :)
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