PHP 注销并更新数据库
PHP logout and update database
我正在使用 PHP/MySQL 创建一个简单的网络应用程序,我想向用户显示如下内容;
`Last Login Time: Friday 4th of March at 2:25pm'
我的 users
数据库具有以下结构;
+---------+-----------+-------------------+---------------------+
| user_id | user_name | user_email | lastLogin |
+---------+-----------+-------------------+---------------------+
| 1 | Joe | joe@something.com | 0000-00-00 00:00:00 |
+---------+-----------+-------------------+---------------------+
解决这个问题的最佳方法是什么?大概我在注销时更新了 lastLogin
列?然后在用户下次登录时,我select这一列数据并显示出来?
到目前为止我的代码如下;
(如果我删除两行 $stmt
,logout()
函数工作得很好。)
class.user.php
class USER {
public function logout() {
$stmt = $this->db->prepare("UPDATE users SET lastLogin = now()");
$stmt->execute();
session_destroy();
unset($_SESSION['user_session']);
return true;
}
public function lastLogin() {
$stmt = $this->db->prepare("SELECT lastLogin FROM users WHERE user_name=:user_name");
$stmt->bindparam(":user_name", $_SESSION['user_name']);
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$date = date('jS M Y h:i', strtotime($row['lastLogin']));
}
return $date;
}
}
logout.php
require_once('session.php');
require_once('class.user.php');
$user_logout = new USER();
if($user_logout->is_loggedin()!="")
{
$user_logout->redirect('index.php');
}
if(isset($_GET['logout']) && $_GET['logout']=="true")
{
$user_logout->logout();
$user_logout->redirect('index.php');
}
index.php
<?php echo '<p>Last Login ' .$USER->lastLogin();'</p>' ?>
感谢任何帮助。
What is the best way to approach this? Presumably I update the lastLogin column on logout?
您不能强制用户注销,所以这种方法行不通。
与其在注销时设置 lastLogin
,不如考虑在登录时设置。您可以保留第二列 actualLastLogin
,以免立即覆盖该值。
登录后,执行:
UPDATE users
SET lastLogin = NOW(),
actualLastLogin = lastLogin
..
然后读取actualLastLogin
的值。
用户可能没有明确的登录时刻,因为您可能有一个持续会话的系统(例如 "remember me on this computer")。在那种情况下,您需要定义您认为的会话。如果您有 1 小时不活动,这是否标志着您的会话结束?由你决定。
或者,您可以保留登录日志,return 最后一个。
我正在使用 PHP/MySQL 创建一个简单的网络应用程序,我想向用户显示如下内容;
`Last Login Time: Friday 4th of March at 2:25pm'
我的 users
数据库具有以下结构;
+---------+-----------+-------------------+---------------------+
| user_id | user_name | user_email | lastLogin |
+---------+-----------+-------------------+---------------------+
| 1 | Joe | joe@something.com | 0000-00-00 00:00:00 |
+---------+-----------+-------------------+---------------------+
解决这个问题的最佳方法是什么?大概我在注销时更新了 lastLogin
列?然后在用户下次登录时,我select这一列数据并显示出来?
到目前为止我的代码如下;
(如果我删除两行 $stmt
,logout()
函数工作得很好。)
class.user.php
class USER {
public function logout() {
$stmt = $this->db->prepare("UPDATE users SET lastLogin = now()");
$stmt->execute();
session_destroy();
unset($_SESSION['user_session']);
return true;
}
public function lastLogin() {
$stmt = $this->db->prepare("SELECT lastLogin FROM users WHERE user_name=:user_name");
$stmt->bindparam(":user_name", $_SESSION['user_name']);
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$date = date('jS M Y h:i', strtotime($row['lastLogin']));
}
return $date;
}
}
logout.php
require_once('session.php');
require_once('class.user.php');
$user_logout = new USER();
if($user_logout->is_loggedin()!="")
{
$user_logout->redirect('index.php');
}
if(isset($_GET['logout']) && $_GET['logout']=="true")
{
$user_logout->logout();
$user_logout->redirect('index.php');
}
index.php
<?php echo '<p>Last Login ' .$USER->lastLogin();'</p>' ?>
感谢任何帮助。
What is the best way to approach this? Presumably I update the lastLogin column on logout?
您不能强制用户注销,所以这种方法行不通。
与其在注销时设置 lastLogin
,不如考虑在登录时设置。您可以保留第二列 actualLastLogin
,以免立即覆盖该值。
登录后,执行:
UPDATE users
SET lastLogin = NOW(),
actualLastLogin = lastLogin
..
然后读取actualLastLogin
的值。
用户可能没有明确的登录时刻,因为您可能有一个持续会话的系统(例如 "remember me on this computer")。在那种情况下,您需要定义您认为的会话。如果您有 1 小时不活动,这是否标志着您的会话结束?由你决定。
或者,您可以保留登录日志,return 最后一个。