Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 27
  1. #1
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774

    [jsp] - bloccare esecuzione della pagina

    salve a tutti,
    avrei bisogno di gestire le sessioni scadute,
    quindi all'inizio di ogni pagina jsp del mio applicativo ho inserito una include
    la cui pagina contiene questo codice:

    codice:
    <%
    String root = request.getContextPath();
    if(session.getAttribute("utente")==null){
    %>
    	<SCRIPT language="JavaScript">
    		alert('La sessione utente è scaduta. Prego rieffettuare il login.');
    		parent.location.href='<%=root%>/index.jsp';
    	</SCRIPT>
    <%
    	return;
    }
    %>

    la sessione scaduta viene rilevata correttamente e anche il redirect funziona bene.
    il problema è che in console mi viene cmq sollevata una NullPointerException perchè la pagina cerca cmq di proseguire nella sua esecuzione, ed essendo scaduta la sessione al primo tentativo di accesso a quest'ultima mi spruzza l'errore.

    ho inserito la return apposta pensando che questo avrebbe bloccato l'esecuzione della pagina ma ciò non avviene...
    qualcuno sa dirmi come mai??

    come posso risolvere?
    grazie mille a tutti
    citrus

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Devi fare il redirect in JSP: quando arrivi all'esecuzione del codice javascript, tutto il JSP nella tua pagina è stato eseguito comunque, non importa se le istruzioni appaiono successivamente al codice javascript.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    ti conviene cmq mettere tutto il codice della pagina all'interno di un blocco if nel quale controlli se session.getAttribute("utente") è null. Fai eseguire il codice della pagina soltanto se questo è diversao da null.
    Al mio segnale... scatenate l'inferno!

  4. #4
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    Originariamente inviato da R@ve M@ster
    ti conviene cmq mettere tutto il codice della pagina all'interno di un blocco if nel quale controlli se session.getAttribute("utente") è null. Fai eseguire il codice della pagina soltanto se questo è diversao da null.
    purtroppo non posso permettermi di modificare così pesantemente tutto l'applicativo (che è veramente grande)...
    ho bisogno di inserire una include (cosa che posso fare in modo massivo con uno script senza aprire pagina x pagina) e gestire da li il controllo...

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    codice:
    <%
    String root = request.getContextPath();
    if(session.getAttribute("utente")==null) {
    response.sendRedirect("/index.jsp");
    %>
    oppure per mandare anche un messaggio, fai una pagina di transizione (come quella che ti riporta al post dopo il submit su questo forum) e la redirect in quella pagina la fai via header html dopo tot secondi
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    Originariamente inviato da Andrea1979
    Devi fare il redirect in JSP: quando arrivi all'esecuzione del codice javascript, tutto il JSP nella tua pagina è stato eseguito comunque, non importa se le istruzioni appaiono successivamente al codice javascript.

    ho già provato anche così ma non funziona...

    codice:
    <%
    String root = request.getContextPath();
    System.out.println("session check");
    if(session.getAttribute("utente")==null){
    	System.out.println("sessione scaduta!");	
    %>
    <jsp:forward page="${home}">
    	<jsp:param name="home" value="<%=root+"/index.jsp"%>" />
    </jsp:forward>
    <%
    	return;
    }
    %>

    la pagina diventa bianca e non succede nulla (nemmeno in console).
    inoltre avrei bisogno anche di dare un messaggio all'utente che lo informi che la sessione è scaduta.. per questo ho bisogno del javascript...

    altro problema...
    le pagine dell'applicativo si trovano dentro ad un frame e la forward di jsp non mi permette
    di gestire questa cosa obbligandomi a rimanere nel frame corrente mentre io vorrei fare il redirect su quello più esterno (parent).

    come posso fare?

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Non puoi mandare roba in output e poi fare un redirect tramite header (Che sia tag jsp o scriplet non importa, tanto sempre di servlet header si tratta)

    login_expired.jsp
    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Documento senza titolo</title>
    <meta http-equiv="Refresh" content="5;URL=/login.jsp" />
    </head>
    
    <body>
    La tua sessione &egrave; scaduta, rieffettuare login
    </body>
    </html>
    e l'altro pezzo di codice come prima
    codice:
    <%
    String root = request.getContextPath();
    if(session.getAttribute("utente")==null) {
    response.sendRedirect("/login_expiredjsp");
    %>
    Per quanto riguarda il dove si apre la pagina quello lo devi risolvere via javascript (per controllare se il frame corrente sia o meno il top frame)... per esempio, aggiungendo questo a login_expired.jsp (chiaramente nell'<head>)
    codice:
    <script language="javascript">
    if (window.self != window.parent) {
      window.frames['top'].document.location.href=window.location.href;
    }
    </script>
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    eccomi, grazie mille x l'aiuto
    purtroppo però non funziona ancora

    ecco il codice:
    codice:
    <%
    String root = request.getContextPath();
    if(session.getAttribute("utente")==null){
         System.out.println("sessione scaduta");
         response.sendRedirect("sessionError.html");
         return;
    }
    %>
    alla pagina sessionError.html non arriva neppure..
    mi scrive in console "sessione scaduta", quindi questo significa che entra nell'if...
    però poi il redirect non funziona e anzi torna la solita NullPointerException, il che significa che la jsp continua insesorabilemente a venire eseguita

    ma dov'è che sbaglio??

    vi ricordo che il codice che ho postato è inserito in una jsp che poi includo all'inizio di tutte le altre pagine..
    non è che x qualche strano motivo è proprio questo il problema?

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Quell'inclusione dev'essere la prima cosa prima di ogni altro output a video. Anche se hai una riga vuota all'inizio del documento stai mandando output. Prova anche a commentare il System.out anche se manda in console... non so se possa interferire (non ho mai provato).
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    Originariamente inviato da Andrea1979
    Quell'inclusione dev'essere la prima cosa prima di ogni altro output a video. Anche se hai una riga vuota all'inizio del documento stai mandando output. Prova anche a commentare il System.out anche se manda in console... non so se possa interferire (non ho mai provato).
    la include è la prima direttiva che metto dopo gli import...
    ho provato anche a togliere la System.out ma mi da cmq gli stessi problemi...
    dev'essere veramente una fesseria ma non riesco proprio a trovare l'inghippo
    help me

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.