Avatar billede samuelsen Nybegynder
08. juni 2004 - 16:09 Der er 33 kommentarer og
1 løsning

sessioner i forskellige vinduer

Hej Eksperter!

Jeg her et problem med sessioner. Det forholder sig således at jeg skal sende et sessionsobjekt fra et vindue til et andet via en http-get funktion, hvordan "griber" jeg SessionsId'et i det nye vindue?

Venlig hilsen
samuelsen
Avatar billede arne_v Ekspert
08. juni 2004 - 16:17 #1
Det første problem bliver at få to forskellige sessioner i de to vinduer !
Avatar billede arne_v Ekspert
08. juni 2004 - 16:19 #2
Da session objekterne opbevares på serveren så formoder jeg at du vil have
at de 2 vinduer er tilknyttet forskellige sessioner på server side, men at
de skal kunne tilgå hinandens sessioner på server side.

Interessant problem stilling. Jeg tror ike det bliver en pæn løsning, men det
må kunne gøres med lidt snedig brug af session listener og en singleton hvor
man gemmer referencer.

Jeg vil ikke garantere for sikkerheden i det, men jehg kan godt prøve at bixe noget
sammen.
Avatar billede samuelsen Nybegynder
08. juni 2004 - 16:23 #3
hej arne! Jeg glemte en vigtig detalje, det drejer sig om en internetbutik jeg er ved at lave, og mit problem er at min betalingsgateway'udvyder (freeway) skal man lave et kald til deres server, og de så videresender til min betalingsform via en SSL forbindelse - i mellem denne forvirring bliver min session "væk" og jeg kan ikke få fat i mine sessionsvariable i min betalingsform. DERFOR vil jeg gerne sende dette sessions ID med i http-headeren, og det ser også ud til at virke, men når jeg skal "importere" dette sessionsobjekt og benytte mine sessionsvariable kan det ikke lade sig gøre....Har du et god svar?
Avatar billede arne_v Ekspert
08. juni 2004 - 16:33 #4
Den skal der vist tænkes lidt over.
Avatar billede fsconsult.dk Nybegynder
08. juni 2004 - 16:48 #5
Jeg har før haft samme problem, og "løst" det ved at lave betalingen i et popup-vindue som lukker til sidst, hvor popup-vinduet kører uden om sessionen.

Alternativt kan det muligvis lade sig gøre at overføre session id med URL rewrite.
Avatar billede samuelsen Nybegynder
08. juni 2004 - 16:51 #6
fsconsult: det har jeg også tænkt - men hvordan sikre jeg så at betalingen er gennemført - inden at resten af koden udføres i det "oprindelige vindue"? Jeg kan jo ikke sende variable frem og tilbage mellem to browser vinduer vel?
Avatar billede samuelsen Nybegynder
08. juni 2004 - 22:28 #7
arne v: du må meget gerne tænke.....
På forhånd tak for hjælpen...
Avatar billede arne_v Ekspert
08. juni 2004 - 23:41 #8
Nu tænker jeg bare lidt højt.

Som jeg forstår dig så har du en ny session, men du kender den gamle session id.

En HashMap med sessionid som key og session som value.

Så kan du tilgå den gamle session.

Den timer naturligvis ud, men så skulle du vel gerne være færdig med
transaktionen.

Det afgørende her er sikkerheden.

Det kan jeg slet ikke gennemskue.

fs - kommentar ?
Avatar billede samuelsen Nybegynder
08. juni 2004 - 23:47 #9
hej arne!
Jeg forstår ikke hvad du mener, men det jeg kan er at benytte session.getId i det oprindelige vindue, og sende denne værdi med i en HTTP-GET/POST med vadiable navnet HTTP_COOKIE til min dankortform - som åbner i et andet vindue - jeg kan så ikke finde udaf at importerer denne sessions-ID og derved få adgang til mine sessionsvariable i min dankortform...
Avatar billede arne_v Ekspert
10. juni 2004 - 20:38 #10
Hvis du gemmer en reference til den gamle session i hash mappen med session id
som key kan du jo finde den frem igen på den anden side.
Avatar billede samuelsen Nybegynder
10. juni 2004 - 20:40 #11
hej arnev tak for svaret - det håbede jeg også på at jeg kunne - vil du være venlig at poste et eksempel?
Avatar billede arne_v Ekspert
10. juni 2004 - 21:02 #12
Jamen der skal stort set ingen kode til.

side 1:

<jsp:useBean id="xfer" scope="application" class="java.util.HashMap"/>
<%
xfer.put(session.getId(), session);
%>

side 2:

<jsp:useBean id="xfer" scope="application" class="java.util.HashMap"/>
<%
String oldid = ...;
HttpSession session2 = (HttpSession)xfer.get(oldid);
X x = (X)session2.getAttribute("x");
%>

Hvor x er det som du skal bruge fra den gamle session.
Avatar billede samuelsen Nybegynder
14. juni 2004 - 08:42 #13
Hej Arne!
Hvad er X betegnelse for? Jeg går udfra at lille x er betegnelse for den variabel som jeg vil hente fra den gamle session?
Avatar billede samuelsen Nybegynder
14. juni 2004 - 09:07 #14
hej arne - har fundet ud af det, men jeg lader lige spørgsmålet stå åbent, da jeg endnu ikke er helt færdig :-)
Avatar billede arne_v Ekspert
14. juni 2004 - 09:26 #15
X = klasse
x = variabel
Avatar billede samuelsen Nybegynder
14. juni 2004 - 12:08 #16
Hej Arne!
Jeg har fået det til at virke når der benyttes samme webserver, altså uden at jeg skal ud via min betalingswebhotel og en https.
Når jeg skal videresendes fra mit betalingswebhotel, kommer sessionsId fint med over i URL linien, og hentes fint ned i jsp-siderne, men når jeg skal hente variable fra session1 virker det ikke!
Flg.: linier virker:
oldid = request.getParameter("HTTP_COOKIE");
HttpSession session2 = (HttpSession)xfer.get(oldid);

flg.: linie virker ikke:
String Ordrenr = (String)session2.getAttribute("Ordrenr");
Avatar billede arne_v Ekspert
14. juni 2004 - 12:18 #17
Har du fået gemt sessionen korrekt ?

Er det alle attributter som er væk ?
Avatar billede samuelsen Nybegynder
14. juni 2004 - 12:38 #18
Ja det vil jeg mene..

Jeg har gjort flg. på den foregående side:
session.setAttribute("Ordrenr", p.getOrdrenr());
session.setAttribute("Amount",String.valueOf(p.getPrisIaltOrdre()));
session.setAttribute("Merchantnr",p.getParamMerchantNumber());
session.setAttribute("ip",p.getParamIp());
session.setAttribute("DankortOK","0");
xfer.put(session.getId(), session);

og jeg kan også se at sessionid på side1 og på min dankortform (side2) er ens...så jeg forstår det simpelthen ikke....
Avatar billede samuelsen Nybegynder
14. juni 2004 - 15:23 #19
kan se at jeg har to forskellige sessionsnumre, så der er to sessioner, men kan ikke få fat i "den gamle"...nogle gode forslag?
Avatar billede arne_v Ekspert
14. juni 2004 - 19:52 #20
Svarer session.getId() på side 1 og session2.getId() på side 2 til hinanden ?
Avatar billede samuelsen Nybegynder
15. juni 2004 - 08:55 #21
NEJ!
eller rettere - det ved jeg ikke - Når jeg prøver at benytte session2.getId() på betalingsformen - så får jeg flg. fejl fra Tomcat:
type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:358)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:856)


root cause

java.lang.NullPointerException
    org.apache.jsp.dankortform_jsp._jspService(dankortform_jsp.java:107)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:856)


note The full stack trace of the root cause is available in the Tomcat logs.

--
Avatar billede arne_v Ekspert
15. juni 2004 - 09:07 #22
Så finder du ikke den gamle session.

Er xfer erklæret med application scope ?

Har du checket for trailing spaces og andet snavs i id ?
Avatar billede samuelsen Nybegynder
15. juni 2004 - 09:10 #23
Side1:
<jsp:useBean id="xfer" scope="application" class="java.util.HashMap"/>
<%

if(p.getHent_dkkform()==0){

session.setAttribute("Ordrenr", "1212121212");
session.setAttribute("Amount",String.valueOf(p.getPrisIaltOrdre()));
session.setAttribute("Merchantnr",p.getParamMerchantNumber());
session.setAttribute("ip",p.getParamIp());
session.setAttribute("DankortOK","0");
xfer.put(session.getId(), session);
}
%>

Side2: - Betalingsform:
<jsp:useBean id="xfer" scope="application" class="java.util.HashMap"/>
<%

String oldid="";
oldid = request.getParameter("HTTP_COOKIE");
HttpSession session2 = (HttpSession)xfer.get(oldid);
String Ordrenr = "";
Ordrenr = (String)session2.getAttribute("Ordrenr");
String amount = "0";
amount = (String)session2.getAttribute("Amount");
String Merchantnr = "1234567";
Merchantnr = (String)session2.getAttribute("Merchantnr");
String ip = "http://localhost:8080";
ip = (String)session2.getAttribute("ip");

%>

Jeg aner ikke hvad trailing spaces er, samt hvad der evt. kunne være af snavs i id'et :-)
Avatar billede samuelsen Nybegynder
15. juni 2004 - 09:20 #24
men når jeg benytter koden på samme server - uden at gå gennem min betalingsgateway, så kan jeg godt benytte både session.getId() og session2.getId() på min betalingsform, uden problem, hvilket medfører et de returnerer samme sessionsid. - så noget tyder på at koden er rigtig nok...
Avatar billede arne_v Ekspert
15. juni 2004 - 20:39 #25
Hvad står din session timeout til ?
Avatar billede samuelsen Nybegynder
15. juni 2004 - 22:09 #26
hvor sætter jeg session timeout henne?
Avatar billede arne_v Ekspert
15. juni 2004 - 22:11 #27
<session-config>
        <session-timeout>30</session-timeout>
    </session-config>

i enten conf/web.xml eller i webapps/xxxx/WEB-INF/web.xml
Avatar billede samuelsen Nybegynder
15. juni 2004 - 22:18 #28
skal det være inde i <servlet> afsnittet i web.xml? eller hvor? For der står intet på den tomcat jeg benytter.
Avatar billede arne_v Ekspert
18. juni 2004 - 21:44 #29
Jeg havde helt glemt den her tråd. Sorry.

Det session-config er et tag på yderste niveau (lige under web-app).
Avatar billede samuelsen Nybegynder
19. juni 2004 - 18:01 #30
det er helt i orden - jeg kigger på det - det bliver først efter weekenden.
Avatar billede samuelsen Nybegynder
23. juni 2004 - 12:10 #31
hej arne! webserveren kan ikke starte hvis jeg indsætter <session-timeout> under webapp i web.xml
Avatar billede arne_v Ekspert
23. juni 2004 - 23:15 #32
Prøv og sæt den ind lige efter servlet-mapping lige før welcome-file-list
(hvis du har sådan nogen)
Avatar billede samuelsen Nybegynder
24. juni 2004 - 14:47 #33
så arne - nu virker det ! Aner ikke hvorfor, men efter endnu en upload og lidt små tilretninger, (dog har jeg ikke indsat <session-timeout>) så virker det, så nu er alt er i orden.
Tak for hjælpen - smid lige et svar, så du kan få point.
Avatar billede arne_v Ekspert
24. juni 2004 - 15:29 #34
Mystisk

Men dejligt at det virker
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