Pagina 2 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 32
  1. #11
    Quote Originariamente inviata da Little Hawk Visualizza il messaggio
    Normalmente questo genere di cose si gestisce nel modo che ti ho gia' suggerito, cioe' controllando lo status code del response dell'AJAX request e se questo e' 401 fare redirect, con JavaScript, alla pagina di login. Con questo si assume che la pagina server side che risponde alla AJAX request non faccia nessun redirect se la sessione e' scaduta e ritorni semplicemente un 401. Questa e' la normale procedura per questo genere di cose.




    Io sto provando ad aiutarti ma se le mie "congetture" non ti vanno bene allora aspetta che risponda qualcun altro.
    Abbi pazienza, non volevo essere scortese ma mi serve il codice! Non so come scriverlo! Questo chiedo!

  2. #12
    Guest
    Registrato dal
    Jun 2012
    residenza
    Espoo, Finland
    Messaggi
    286
    Quote Originariamente inviata da manuel81pd Visualizza il messaggio
    Abbi pazienza, non volevo essere scortese ma mi serve il codice! Non so come scriverlo! Questo chiedo!
    Ricapitolando:

    1. La pagina che risponde alla richiesta AJAX deve ritornare un 401 se la sessione e' scaduta. Puoi postare il codice di questa pagina cosi' vediamo un po' perche' non ritorna un 401 in questo caso? Se non ho capito male hai detto che lo status code e' invece 200.

    2. Quando la richiesta risulta in un 401 allora cambia la location con la pagina di login:

    codice:
    $.ajax({
      ...
      error: function(xhr, desc, err) {
        if (xhr.status === 401) {
          location.href = "/pagina-di-login";
        } else {
          // Per es. 422 nel caso di validazione del form fallita
          // in questo caso visualizzare messaggi di errore etc.
        };
      }
    });

    3. Potresti anche fare in modo che cio' accada per tutte le richieste AJAX con qualcosa del genere:

    codice:
    $(document).ajaxError(function(event, xhr, settings, exception) {
      if (xhr.status === 401) {
        location.href = "/pagina-di-login";
      };
    });

  3. #13
    Abbi pazienza, vuoi vedere il codice della pagina in php che controlla la sessione?

  4. #14
    Guest
    Registrato dal
    Jun 2012
    residenza
    Espoo, Finland
    Messaggi
    286
    Quote Originariamente inviata da manuel81pd Visualizza il messaggio
    Abbi pazienza, vuoi vedere il codice della pagina in php che controlla la sessione?
    Si'

  5. #15
    Quote Originariamente inviata da Little Hawk Visualizza il messaggio
    Si'
    <?php


    $minutes=5;//Setta logout in minuti

    if (isset($_SESSION["time"])) {
    $sessionTTL = time() - $_SESSION["time"];
    if ($sessionTTL > $minutes*60) {
    session_unset();
    session_destroy();
    header("location:index.php");//redirect user to a login page or any page to which we want to redirect.
    }
    }else {
    session_unset();
    session_destroy();
    header("location:index.php");//redirect user to a login page or any page to which we want to redirect.
    }


    $_SESSION["time"] = time();

    ?>

  6. #16
    Guest
    Registrato dal
    Jun 2012
    residenza
    Espoo, Finland
    Messaggi
    286
    Questo codice viene incluso in tutte le pagine che richiedono autenticazione, giusto?

    Se si' penso il problema sia in questa linea, che ti fa il redirect server side anche per la AJAX request.

    codice:
    header("location:index.php");
    Invece nel caso di AJAX requests non dovrebbe fare il redirect server side ma ritornare un 401:

    codice:
    header("HTTP/1.1 401 Unauthorized");
    In questo modo puoi poi controllare, col JavaScript che ho scritto prima, che lo status code e' 401 e cosi' puo' fare il redirect client side quando la sessione e' scaduta, altrimenti procede come al solito.

    Quindi le cose da fare sono semplicemente due:

    1. Far si' che tutte le AJAX requests abbiano un custom header che il PHP puo' poi controllare per sapere appunto se una richiesta e' AJAX:

    codice:
    $.ajaxSetup({
        beforeSend: function(xhr) {
            xhr.setRequestHeader('HTTP_X_REQUESTED_WITH_AJAX', 'true');
        }
    });
    (Questo e' soltanto un modo di farlo)

    2. Nel PHP controllare se la richiesta e' AJAX. In caso affermativo ritornare un 401 altrimenti fare il redirect alla pagina di login server side:


    codice:
    <?php
    
    
    
    
    $minutes = 5; //Setta logout in minuti
    
    
    if (isset($_SESSION["time"])) {
        $sessionTTL = time() - $_SESSION["time"];
        if ($sessionTTL > $minutes * 60) {
            session_unset();
            session_destroy();
            
            if (isset($_SERVER['http_x_requested_with_ajax']) && !empty($_SERVER['http_x_requested_with_ajax']) && strtolower($_SERVER['http_x_requested_with_ajax']) == 'true') {
                header("HTTP/1.1 401 Unauthorized");
            } else {
                header("location:index.php"); //redirect user to a login page or any page to which we want to redirect.
            }
        }
    } else {
        session_unset();
        session_destroy();
        
        if (isset($_SERVER['http_x_requested_with_ajax']) && !empty($_SERVER['http_x_requested_with_ajax']) && strtolower($_SERVER['http_x_requested_with_ajax']) == 'true') {
            header("HTTP/1.1 401 Unauthorized");
        } else {
            header("location:index.php"); //redirect user to a login page or any page to which we want to redirect.
        }
    }
    
    
    
    
    $_SESSION["time"] = time();
    
    
    ?>

    Ovviamente potresti rimuovere duplicazione.

    Adesso il PHP sa' quando si tratta di una AJAX request e in tal caso ritorna il famoso 401 che ti serve. Chiaro?

  7. #17
    Scusa ho fatto come segue, ma credo non sia corretto.


    codice:
    <script type="text/javascript">
    		$(document).on("submit", "form", function(event){
    
    
    			event.preventDefault();
    			$('#ShowData').html('<img src="img/loader.gif" height="16" width="16"/>');
    			
    			$.ajaxSetup({
    				beforeSend: function(xhr) {
    					xhr.setRequestHeader('HTTP_X_REQUESTED_WITH_AJAX', 'true');
    				}
    			});
    			
    			$.ajax({
    				url: 'ins_ok.php',
    				type: 'POST',
    				data: new FormData(this),
    				processData: false,
    				contentType: false,
    				
    				success: function (data, status)
    				{ 
    					$('#ShowData').html(data);
    					$('#Ins')[0].reset();
    					$('#Data').datepicker('update', '');
    					
    				},
    				error: function (xhr, desc, err)
    				{
    					alert('Dati al momento non disponibili. Riprovare pi� tardi.');	
    					console.warn(xhr.responseText);
    					alert(xhr.status);
    					alert(err);
    				}
    			});        
    		});
    	</script>

  8. #18
    Guest
    Registrato dal
    Jun 2012
    residenza
    Espoo, Finland
    Messaggi
    286
    Questo va messo fuori da quel blocco:

    codice:
                $.ajaxSetup({
                    beforeSend: function(xhr) {
                        xhr.setRequestHeader('HTTP_X_REQUESTED_WITH_AJAX', 'true');
                    }
                });
    Le modifiche al PHP le hai gia' fatte?

  9. #19
    Modiche PHP fatte

    Cosi?
    codice:
    <script  type="text/javascript">
    	$.ajaxSetup({
    				beforeSend: function(xhr) {
    					xhr.setRequestHeader('HTTP_X_REQUESTED_WITH_AJAX', 'true');
    				}
    			});
    	</script>		
    	<script type="text/javascript">
    		$(document).on("submit", "form", function(event){
    
    
    			event.preventDefault();
    			$('#ShowData').html('<img src="img/loader.gif" height="16" width="16"/>');
    			$.ajax({
    				url: 'ins_ok.php',
    				type: 'POST',
    				data: new FormData(this),
    				processData: false,
    				contentType: false,
    				
    				success: function (data, status)
    				{ 
    					$('#ShowData').html(data);
    					$('#Ins')[0].reset();
    					$('#Data').datepicker('update', '');
    					
    				},
    				error: function (xhr, desc, err)
    				{
    					alert('Dati al momento non disponibili. Riprovare più tardi.');	
    					console.warn(xhr.responseText);
    					alert(xhr.status);
    					alert(err);
    				}
    			});        
    		});
    	</script>

  10. #20
    Guest
    Registrato dal
    Jun 2012
    residenza
    Espoo, Finland
    Messaggi
    286
    Controllando per es. con Chrome Dev Tools cosa vedi adesso negli headers sia della request che del response quando tenti una AJAX request e la sessione e' scaduta?

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.