2012-02-11 9 views
5

È normale che il browser memorizzi le informazioni su utente e password se l'utente ha effettivamente fatto clic sulla "password della pagina di rember" (browser, non funzionalità del sito Web).Lascia che il browser memorizzi i valori dei campi di input nei moduli generati dinamicamente

Ho questo modulo di login che ho generato usando una chiamata asincrona, qualcosa di simile:

$('#container').load('/path/file.php?what=login_form'); 

In questa forma, comunicate il browser non ricorda (e inserire automaticamente per me) anche se ho cliccato su "sì, ricorda la password".

Ciò significa che verranno ricordati solo i moduli di pagina URL?

EDIT - esempio uscita

<div class="caja loginBox"> 
     <form action="index.php" method="post" name="sesion" id="sesion"> 
     <h1>Inicio de sesion</h1><h2>Usuario</h2> 
    <input type="text" id="nombre" name="nombre"/> 
    <h2>Password</h2><input type="password" id="pass" name="pass"/><button type="submit" name="inicio">Entrar</button> 
    </form> </div> 
+0

Potresti pubblicare l'output HTML di ''/path/file.php? What = login_form''? –

+2

Questo è un comportamento standard. E quindi è il motivo per cui usiamo i moduli di accesso generati dinamicamente, se vogliamo che l'utente non sia in grado di memorizzare il pw –

+0

scusate, hai ragione, editing quesiton –

risposta

2

ho trovato una soluzione che funziona con il password manager di Firefox. A seconda del motivo per cui si sta caricando il modulo in modo dinamico, la mia soluzione potrebbe non essere d'aiuto. (Altro su quello sotto.)

Innanzitutto, inserire un modulo invisibile (ho utilizzato uno stile in linea di "display: none") nella pagina che utilizza lo stesso metodo e azione e contiene campi con gli stessi nomi. Si può mettere questo sotto il div che alla fine conterrà la vera e propria forma:

<div id="container"></div> 

<div id="fake-form" style="display: none"> 
    <form action="index.php" method="post"> 
     <input type="text" name='nombre' class='nombre'/> 
     <input type="password" name='pass' class='pass' /> 
    </form> 
</div> 

Poi, nel vostro JavaScript, dopo che il contenuto della forma reale è stato caricato, copiare i valori fuori dal modulo falso e metterli in quello reale:

<script type="text/javascript"> 
    $(function() { 
     $("#container").load("/path/file.php?what=login_form", function() { 
      var fakeForm = $("#fake-form"); 
      $("#nombre").val(fakeForm.find(".nombre").val()); 
      $("#pass").val(fakeForm.find(".pass").val()); 
     }); 
    }); 
</script> 

detto questo, se si sta andando attraverso questo molto sforzo di mettere un modulo nella pagina prima di caricare in modo dinamico la forma attuale, allora perché non solo rimuovere tale ultimo passo e hanno la modulo sulla pagina per cominciare? :-) Presumibilmente hai una buona ragione per farlo comunque. Forse il modulo proveniente dal server ha informazioni di stile uniche o messaggi di errore dinamici accanto ai campi o nomi di campi i18n?

Tuttavia, se il modulo che stai prelevando dal server ha un'azione che varia per utenti diversi, il mio trucco non funzionerà perché devi conoscere l'azione in anticipo quando crei il modulo nascosto.

Se questo è il caso, allora forse potresti provare il mio trucco in senso inverso e nascondere il "modulo reale" che carichi dal server e visualizzare il modulo falso all'utente. Il falso modulo potrebbe postare su un URL inesistente, ma potresti usare JavaScript per intercettare l'onsubmit del "modulo falso", copiare il nome utente e la password nella "forma reale" invisibile, invocare submit sul modulo reale, e restituire false per impedire che venga inviata l'inoltro del modulo originale.

Aggiornamento: Dopo averci pensato un po 'di più, non credo che la mia seconda soluzione avrebbe funzionato, perché i gestori di password quasi sicuramente associano il nome utente e la password con l'URL finale che in realtà invia i dati a, piuttosto che l'URL dell'azione iniziale nel modulo in cui si sarebbe inizialmente fingendo di inviare. Ad ogni modo, spero che la mia prima soluzione sia adeguata per quello che stai facendo.

+0

Ho finito per farlo al secondo modo. basta caricare il modulo nel div nascosto e mostrarlo (senza carico) con javascript. molto più semplice. Grazie per l'aiuto! –

Problemi correlati