Tengo esto en mi página de inicio de sesión:

   $current_time = date("g:i A");
   $current_date = date("l, F jS, Y");
   mysql_query("UPDATE employees 
   SET last_login = '$current_time', last_login_date = '$current_date' WHERE username='$username' AND password='$password'");

Y, a continuación, en la página cuando el usuario se registra en la página protegida) tengo este:

 [...]

 <?php 
 $last_login_date = $info['last_login_date']; //get last_login_date from mysql table
 $last_login_time = $info['last_login_time']; //get last_login_time from mysql table
 ?>

 [...]

 You last signed in on <?php echo $last_login_date; ?> at <?php echo $last_login_time; ?>.

Pero este no funciona correctamente debido a que muestra el momento en que acaba la sesión. ¿Cómo puedo hacer que se vean la última vez que inició sesión?

Yo también incluso intentado añadir un prev_login_time y prev_login_date a la mesa, pero no sé cómo hacer que se actualice correctamente debido a que se actualiza cada vez que inicie sesión en lo que es mostrar el tiempo sólo ha iniciado la sesión. (por lo que estaría mostrando la hora actual para ellos)

Gracias.


Edición: [para EdoDodo]

He aquí el inicio de sesión si la instrucción que se ajuste a la última dirección IP variable de sesión:

if($_POST['submit']) {
$sql = "SELECT * FROM employees WHERE username='$username' and password='$password'";
$result = mysql_query($sql);
$count = mysql_num_rows($result);
$info = mysql_fetch_array($result);

     if($count == 1) {

     $_SESSION['loggedin'] = 1;
     $_SESSION['user'] = $username;
     $_SESSION['last_login_time'] = $info['last_login'];
     $_SESSION['last_login_date'] = $info['last_login_date'];
     $_SESSION['last_ip'] = $info['last_login_ip'];

         $return = $_SESSION['returnurl'];
         if(!$return) {
         $return = "/employee/";
         }
         date_default_timezone_set('America/New_York');
         $current_time = date("g:i A");                                                                                                                                                                                       
         $current_date = date("l, F jS, Y");
         $ip = $_SERVER['REMOTE_ADDR'];
         mysql_query("UPDATE employees 
         SET last_login = '$current_time', last_login_date = '$current_date', last_login_ip = '$ip' WHERE username='$username' AND password='$password'");
         header("Location: $return");
         exit();
     } 

La fecha de último acceso y el tiempo de trabajo, que es por qué no sé por qué no funciona con la IP de uno. Estoy acceder correctamente a la página protegida:

$last_login_date = $_SESSION['last_login_date'];
    if($last_login_date = date("l, F jS, Y")) {
    $last_login_date = "Today";
    }
    $last_login_time = $_SESSION['last_login_time'];
    if($_SESSION['last_ip'] != $_SERVER['REMOTE_ADDR']) {
    $last_login_ip = "this IP address (".$_SERVER['REMOTE_ADDR'].")";
    }
    else {
    $last_login_ip = "IP address ".$_SESSION['last_ip'];
    }                                                                                                                
    echo "Last account login: ".$last_login_date." at " . $last_login_time . " from " . $last_login_ip . ".";

Estoy haciendo algo mal? Tal vez no soy la configuración de la variable de sesión o recuperar correctamente? Pero parece que yo soy. Espero que pueda ayudar. Gracias de antemano.

  • ¿Por qué está usted con PHP generar timestamp cadenas para esto? Sólo uso now() dentro de la cadena de consulta. El almacenamiento de fechas como cadenas de caracteres en mysql costos de la posibilidad de cualquier tipo de normal de fecha/hora manipulaciones/cálculos en los campos, sin cara por consulta sobre la marcha de las conversiones.
  • lo cierto es, pero el almacenamiento de un formato totalmente cadena todavía ocupa más espacio en la base de datos de un nativo fecha/campo datetime hace. Y si más tarde decide cambiar los formatos de fecha, usted tendrá que reparsed cada campo de sí mismo, en lugar de simplemente cambiar una simple especificación de formato.
  • Oh, entonces, ¿now() hacer la misma cosa como date("g:i A"); y date("l, F jS, Y");?
  • no. te gustaría convertir los campos de fecha en nativa real fecha/campos de fecha y hora. entonces ahora() inserta un nativo de valor de datetime en esos campos (correspondiente a la fecha/hora actual en el momento de la inserción). a continuación, se utilizaría date_format() en su recuperación de la consulta de los valores de formato que usted desee.
  • Oh. Parece como un montón de trabajo. Voy a intentarlo algún día. Estás diciendo de la manera que yo lo estoy haciendo ahora ocupa demasiado almacenamiento de base de datos o algo?
  • un campo de marca de hora las necesidades de 4bytes, datetime necesidades de 8 bytes. Para la fecha de hoy (Octubre 3), sus dos formatos de fecha de fecha de 25 caracteres, por lo que se está perdiendo de 17 caracteres de la pena de espacio.

InformationsquelleAutor Nathan | 2011-10-03

1 Comentario

  1. 5

    Usted querrá recuperar el tiempo de inicio de sesión de la tabla en la base de datos en el $info matriz antes de de actualizar la base de datos y sobrescribir el tiempo con el nuevo. A continuación, tendrás la anterior tiempo de inicio de sesión en el $info array (y, si se quiere realizar a través de un montón de diferentes cargas de página, usted puede ponerlo en una variable de sesión).

    • Oh, sí! No puedo creer que no pensaba en eso. Gracias!
    • Sí, voy a ponerlo en una variable de sesión 🙂 Gracias de nuevo.
    • Por alguna razón que no está funcionando del todo bien con la variable de sesión para la última dirección IP. He editado mi pregunta, así que usted puede ver mi código de inicio de sesión que se establece la variable de la última dirección IP. Por alguna razón la última dirección IP es el ser que acaba de registrar en. ¿Ves algún problema con ella?
    • Podría usted ayudar? Gracias.
    • Quisiera que alguien pudiera ayudar. :/
    • He mirado en el código, pero realmente no puede ver el problema con él, lo siento :(. Tal vez usted podría comenzar como una nueva cuestión, de modo que más gente va a tener una mirada en ella.
    • Ah ok, gracias por mirarlo. Voy a publicar una nueva pregunta.

Dejar respuesta

Please enter your comment!
Please enter your name here