Función Time () en PHP

Solo quería preguntar, dado que estoy codificando un script, y estoy usando time() como una sal para lo que estoy haciendo.

Ahora lo que sucede es que saco los datos enviados desde el servidor 1 al servidor 2. El servidor 2 comprueba si el data = submitted_data + time() coincide exactamente. Y quería saber, dado que mi script se usará en diferentes servidores, ¿la función time() devolverá el mismo valor (si están ubicados en diferentes partes del mundo)?

Un ejemplo de código del cliente es:

if($return == md5("true" . time()))

Y un ejemplo de código, donde si los datos que se envían correctamente, devolverán esto:

echo md5('true' . time());

Ambos están en diferentes servidores en diferentes partes del mundo, pero quería saber si usar el time() estropeará la forma en que mi sistema funcionará ...

0
¿Por qué no cambiar la sal cada uso, en lugar de cada minuto?
agregado el autor Brad, fuente
¿Podría usar algo como el tiempo (hora: minuto) y no tener que tener segundos incluidos?
agregado el autor Reverb, fuente
¿Cómo haría para que la sal cambiara cada uso? Ambos scripts están en diferentes servidores, uno es el cliente y el otro es el host/maestro que tiene todos los switches para controlar al cliente.
agregado el autor Reverb, fuente
Estoy seguro, ya que el código anterior y posterior en las secuencias de comandos del cliente y del servidor están asegurados para garantizar que devuelve los datos correctos. Pero todo lo que necesitaba saber es si time() es igual en todos los servidores. Debido a que parece estar funcionando desde mi servidor local, estoy en Australia y mi servidor en EE. UU. Pero creo que sería mejor usar H: M en lugar de H: M: S?
agregado el autor Reverb, fuente
Ya veo ... Vi el tiempo() como la mejor opción para usar, porque quería un SALT que cambia cada minuto, pero devuelve el mismo valor en TODOS los servidores del mundo. No sé cómo voy a superar ese problema.
agregado el autor Reverb, fuente
¿Qué estás tratando de hacer exactamente - autenticación de mensajes? Sé muy cuidadoso al respecto. Puede ser vulnerable a ataques de extensión hash o algo similar. Si es posible, usa la biblioteca de otra persona.
agregado el autor Waleed Khan, fuente
y si tiene ambos servidores sincronizados por tiempo, ¿qué puede hacer con el tiempo de retraso en el envío/recepción de datos al segundo servidor?
agregado el autor revo, fuente
Yo no confiaría en eso. Si los relojes no están sincronizados, obtendrás errores.
agregado el autor andrewsi, fuente
Es posible que tenga un problema cada 60 segundos. Eso suena completamente poco confiable para mí.
agregado el autor Alan Piralla, fuente
php.net/gmdate podría ser una mejor idea ... pero incluso entonces, no diría que podría ser confiable para cada servidor
agregado el autor Nick, fuente
¿Qué te hace pensar que el tiempo en dos máquinas sería el mismo a menos que tengas funcionando el NTP?
agregado el autor Reza S, fuente

2 Respuestas

Esto no funcionará, porque time() se basa en el reloj local del sistema, que prácticamente no está sincronizado entre dos computadoras/relojes. En segundo lugar, no puede garantizar cuándo el sistema operativo le dará tiempo a un proceso determinado para ejecutarse; por lo tanto, un servidor puede estar a milisegundos apagado simplemente porque estaba haciendo algo más intensivo. Entonces tiene latencia de red, etc., etc.

Este es un problema importante con los sistemas distribuidos, que tienen que mantener las cosas "sincronizadas" sin saber con precisión cuándo ocurrieron las acciones. (¿Debería esta actualización del DB ocurrir antes de esa, si la base de datos está distribuida en varios servidores?) Lo mejor es no confiar en el tiempo por esa razón, sino tal vez en otra cosa, como un número de revisión (que luego se incrementa ) Por ejemplo:

  • El servidor envía datos con ID de revisión = 142 (Nota '142' es arbitrario para este ejemplo)
  • El cliente realiza un cambio, incrementa la revisión y lo modifica.
  • El cliente envía los datos al servidor con el número de revisión hash.
  • El servidor incrementa su propia identificación de revisión y la mezcla. Esto ahora debería ser igual a lo que el cliente envió.
  • Si no lo hace, el servidor rechaza el envío de datos.

Esto le da la capacidad de simular tiempo sin depender de un recurso externo inconsistente.

0
agregado
Ya veo, pero por alguna razón mi servidor local, que estoy en Australia y mi servidor, que está en los EE. UU., El script funciona, pero a veces no de vez en cuando. Pero, ¿hay alguna otra opción que pueda elegir? de tiempo()? ¿Hay una manera posible de tener tiempo (HH: SS) HH siendo hora y SS siendo el segundo?
agregado el autor Reverb, fuente
Vea mi revisión, pero tenga en cuenta que HH: SS también puede fallar ocasionalmente por la misma razón; supongamos que solo se tarda un microsegundo en enviar y procesar, pero en ese momento el "segundo" pasa al siguiente segundo.
agregado el autor Nathaniel Ford, fuente

¿Por qué no intentas seguir?

fecha de eco ("Y-m-d H: i") echo strtotime (date ("Y-m-d H: i"));

Valor de strtotime (date ("Y-m-d H: i")); no cambiaría hasta que pase el próximo minuto O puede eliminar "i" en función de su requisito.

Espero que ayude.

0
agregado
Ohhh, correcto. ¿Y para qué es H: i? Y dado que usaría la fecha en vez del tiempo ... ¿Es el mismo valor para cada servidor/ubicación? ¿O devuelve la fecha del servidor donde está el script?
agregado el autor Reverb, fuente
¿Qué significa el Y m d H i? ¿Sería este el mejor método para usar si fuera a usar sal de tiempo?
agregado el autor Reverb, fuente
Y es por año, m => por mes, d por día, H => por hora, i => minuto. ¿Por qué no echas un vistazo a "mcrypt_create_iv" o "mt_rand" según tus requisitos?
agregado el autor sandeep Kumar, fuente
Devuelve la fecha del servidor en el que se ejecutará el script.
agregado el autor sandeep Kumar, fuente
Aunque no te sugiero que uses algo en función del tiempo para salar a menos que sea la última opción para ti
agregado el autor sandeep Kumar, fuente
PHP - Comunidad española
PHP - Comunidad española
6 de los participantes

En este grupo hablamos de PHP. Partner: es.switch-case.com