Avatar billede r9 Nybegynder
15. maj 2002 - 21:22 Der er 8 kommentarer og
1 løsning

session.setAttribute problem?

Jeg har lavet en event.jsp, som alle mine jsp sider bliver sendt til. Denne event.jsp sørger for at viderdiregerer til de rigtige sider.

Problemet opstår hvis:

En bruger ikke udfylder noget i felterne og trykker ok.
Første gang diregeres brugeren til error.jsp og der vises en fejlmeddelse. (dette er ok)

Hvis brugeren nu trykkker på browserens tilbageknap og kommer tilbage til index.jsp, og her trykker igen på ok-knappen, så bliver min
session.setAttribute("fromPage", "index.jsp") ikke sat.
Det betyder at event.jsp ikke kender "fromPage", og derfor kan der ikke sendes videre til error.jsp.

Hvordan løses dette?


Her er 4 sider som symboliserer problemmet:


INDEX.JSP (bruges til at logge ind)
****************************************

<%
session.setAttribute("fromPage", "index.jsp");
%>

<html>
<head>
<title> </title>
</head>
<body>

<p><u><b>Login:</b></u></p>
<form name="form1" method="post" action="event.jsp">
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="20%" id="AutoNumber1">
<tr>
<td width="50%">Bruger</td>
<td width="50%"><input type="text" name="USER" size="20"></td>
</tr>
<tr>
<td width="50%">Kodeord</td>
<td width="50%"><input type="password" name="PASSWORD" size="20"></td>
</tr>
</table>

<br>
<input type="submit" name="Loginknap" value="Login">
</form>

</body>
</html>

*************************************************


EVENT.JSP
(tjekker om brugernavn og password er ok, og sender
derefter brugeren til forside.jsp el. error.jsp)

<%@ page import=" java.util.*" %>

<HTML>
<HEAD>
<BODY>

<%



    String fromPage = (String)session.getAttribute("fromPage");
    String toPage = "";

    if ( (fromPage != null) && (fromPage.length() > 0) ) {
        session.removeAttribute("fromPage");

        if (fromPage.equals("index.jsp")) {
            String user = request.getParameter("USER");
            String password = request.getParameter("PASSWORD");
            boolean noError = true;


            if ( (user != null) && (password != null) )
                if  ( user.equals("123") && (password.equals("123")) )
                    toPage = "forside.jsp";

                else {
                    noError = false;
                }

            if (!noError) {
                toPage = "error.jsp";
                session.setAttribute("continuePage", "index.jsp");
                session.setAttribute("errorMsg", "Ugyldigt login eller password.");
            }
        }

    }






    else {
        toPage = "error.jsp";
        session.setAttribute("errorMsg", "FEJL: [fromPage] er ukendt!.");
        session.setAttribute("continuePage", "index.jsp");
    }

    response.sendRedirect(toPage);
%>


</BODY>
</HTML>

************************************************


FORSIDE.JSP

<%
    session.setAttribute("fromPage", "forside.jsp");

%>


<html>
<head>
<title> </title>
</head>


<body>

dette er forsiden....


</body>
</html>



****************************************

ERROR.JSP (bruges til at vise fejlmeddelser på)


<HTML>
<HEAD>
<TITLE> </TITLE>
<BODY>

<%

    String errorMsg = (String)session.getAttribute("errorMsg");
    String toPage = (String)session.getAttribute("continuePage");

    if ( ((errorMsg != null) && (errorMsg.length() > 0)) && ((toPage != null) && (toPage.length() > 0)) ) {
        session.removeAttribute("errorMsg");
        session.removeAttribute("continuePage");

        %>

        <H1><%=errorMsg%></H1>
        <P>
        <A HREF="<%=toPage%>"><B>Fortsæt</B></A>

        <%

    }

%>

</BODY>
</HTML>


Håber nogen kan hjælpe?
Avatar billede disky Nybegynder
16. maj 2002 - 00:13 #1
slå caching fra med:
    response.setDateHeader("Expires", 0);
    response.setHeader("Pragma", "no-cache");
    if (request.getProtocol().equals("HTTP/1.1"))
    {
        response.setHeader("Cache-Control", "no-cache");
    }

i toppen af dine sider

og brug evt.
request.getHeader("referer"); som returnerer en string med navnet på den side du kommer fra.
Avatar billede r9 Nybegynder
16. maj 2002 - 09:17 #2
disky:

kan du ikke give et eks. på hvordan jeg præcist bruger
request.getHeader("referer"); ?
Avatar billede disky Nybegynder
16. maj 2002 - 09:29 #3
String komHvorFra=request.getHeader("referer");
response.sendRedirect(komHvorFra);

Så bliver du sendt der til hvor du kom fra, et sted tilbage.
Avatar billede r9 Nybegynder
16. maj 2002 - 09:37 #4
funktionen kan detsværre ikke bruges i mit tilfælde.

Funktionen er jo JSP, og bliver jo ikke loadet igen hvis brugeren bruger tilbage knappen....
Avatar billede disky Nybegynder
16. maj 2002 - 10:00 #5
så slå caching fra som jeg har vist, så virker 'back' ikke uden at siden skal reloades.
Avatar billede r9 Nybegynder
16. maj 2002 - 10:33 #6
disky:

nu virker det.

Men noget er underligt. Selv om jeg sætter no-caching koden ind på alle mine sider, så kan jeg gå tilbage, uden at der kommer en "forældet beskrivelse". MEN siden bliver automatisk loadet. Så det viker alligevel.
(måske er det IE 6.0)

Tak.
Avatar billede disky Nybegynder
16. maj 2002 - 10:39 #7
hmmm, det er mystisk.

Jeg har aldrig brugt ie6, så jeg kan ikke svare på om det er det.

Prøv evt, at fjerne if sætningen men ikke det inden i if'en
Avatar billede r9 Nybegynder
16. maj 2002 - 13:33 #8
disky:

http://www.eksperten.dk/spm/210639
Har du prøvet IntelliJ fra IDEA?

Det er mega sejt, og det performer for vildt :-))
Kanon editor til Java/JSP
Avatar billede disky Nybegynder
16. maj 2002 - 14:01 #9
jeg har faktisk aldrig brugt den selv, jeg kender Forte for godt.

Men en god ven bruger udelukkende IntelliJ og han lovpriser den kode formatering til skyerne, og ja dn er for sej.
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