Pregunta

En resúmen:. En Chrome y Safari solamente, los valores de un formulario de acceso son a veces pegar en el URL del usuario, a pesar de que el inicio de sesión real se publica a través de AJAX

http://my-site.example/?name=user&pw=xxx&challenge=b1be8ad7aac242...

Se nos ha informado en varias ocasiones y he visto que suceda a mí mismo, pero han sido incapaces de reproducir yo mismo, y mucho menos averiguar qué demonios está pasando. Esto es lo que la forma de la conexión se reduce a:

<form name="login">
  <input type="Text" name="name">
  <input type="password" name="pw">
  <input type="hidden" name="challenge">
  <input type="button" onclick='JavaScript:xmlhttpPost("/php/login.php")'>
</form>

La Solicitud publicada real ni siquiera contiene el parámetro reto:

function xmlhttpPost(strURL) {
  if (window.XMLHttpRequest) {
    self.xmlHttpReq = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
  }
  self.xmlHttpReq.open('POST', strURL, true);
  ...
  query = 'name=' + encodeURIComponent(name) + '&pw=' + encodeURIComponent(hash) + '&lpw=' + encodeURIComponent(legacy_hash);
  self.xmlHttpReq.send(query);
}

Y en el inicio de sesión correcto, el usuario es redirigido de nuevo a la misma página (= obligado a volver a cargar) si y sólo si tienen una configuración de idioma distinto del predeterminado:

location.href = "http://" + location.host + location.pathname;

¿Alguna idea?

¿Fue útil?

Solución

Iin los casos que usted describe, en realidad la forma que se envía, probablemente debido a que el usuario tiene desactivado JavaScript o se produce un error de script en xmlhttpPost.

El formulario se envían como una solicitud GET en algunos navegadores, ya que no especifica una propiedad method. (Creo que es el valor predeterminado GET correcta de acuerdo a la norma, pero algunos navegadores difieren de estos). Por lo tanto, los datos del formulario va a terminar en la URL.

Dar la forma de un method="POST":. Que va a arreglar los datos de la contraseña en la parte URL

Otros consejos

¿Sabes lo que más detestan de desbordamiento de pila? El hecho de que, al hacer usted presenta incluso sus problemas más difíciles en lo más simple y la reducción de una forma posible, a menudo tropiezan con las soluciones a sí mismo, por lo general alrededor de 5 segundos después de la presentación.

Esta vez, resulta que presionar ENTER estaba causando Safari / Chrome (WebKit) para enviar el formulario y se adhieren a los parámetros de la URL. La cura es simple:

<form name="login" onSubmit='JavaScript:return false;'>

Y un consejo o' el sombrero aquí:

¿Cómo puedo evitar que el navegador WebKit para enviar un formulario cuando se pulsa eNTER en una entrada

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top