【发布时间】:2012-02-18 22:04:48
【问题描述】:
我正在构建一个登录应用程序,我想存储用户注册的日期和最后一次登录日期以及最后一次登录 ip。
在创建表格时,我应该为这三列中的每一列赋予什么类型?
当我插入新的用户名和其他数据时,我将如何进行?
我应该使用PHP获取注册日期还是应该使用mysql的当前日期?
对于上次登录日期和ip,我该怎么做?
【问题讨论】:
我正在构建一个登录应用程序,我想存储用户注册的日期和最后一次登录日期以及最后一次登录 ip。
在创建表格时,我应该为这三列中的每一列赋予什么类型?
当我插入新的用户名和其他数据时,我将如何进行?
我应该使用PHP获取注册日期还是应该使用mysql的当前日期?
对于上次登录日期和ip,我该怎么做?
【问题讨论】:
创建表时,我应该为这三个中的每一个指定什么类型 列?
将create_date 和last_login_date 都设为DATETIME 和last_login_ip 一个VARCHAR
我应该使用 PHP 来获取注册日期还是应该使用 mysql 的 当前日期?
这无关紧要,除非您被要求不使用 MySQL 特定功能。
对于上次登录日期和ip,我该怎么做?
当用户登录时,运行更新语句,用当前时间戳填充last_login_date,用$_SERVER['REMOTE_ADDR'] 的内容填充last_login_ip。
【讨论】:
register_date 和last_login_date 设为日期(类型),但我对这两个的问题是:我应该在MySql 表中将它们的Attributes 设置为on update CURRENT TIMESTAMP 还是应该不理会它,并且至于他们的价值观,我应该补充什么,什么都没有?对于last_login_ip,它是表中的值,我应该将其留空吗?目前我的表中没有任何用户,所以我猜它不应该有任何价值。
DATETIME(不是DATE,这是mysql中的另一种类型)。手动更新日期(不是TIMESTAMP),例如UPDATE users SET last_login_date = NOW() WHERE id = 1。关于last_login_ip,是否要填充数据完全取决于您。
register_date和last_login_date设置什么长度?
DATETIME 列。它们不需要长度。
CreatedDate : datetime
LastLoginDate : datetime
LastLoginIp : varchar(20)
查看此链接以了解如何获取用户的 ip。 http://www.plus2net.com/php_tutorial/php_ip.php
当用户尝试登录时,您会根据数据库检查用户名和密码,如果用户有效,则获取用户 IP 并更新您的表以将此 IP 地址作为“LastLoginIp”列的值。
【讨论】:
对于createdDate 和lastLoginDate 使用datetime 字段,对于IP 地址使用int 字段并通过PHP 的ip2long() 函数插入数据,请参阅PHP.net。
要检索数据,您可以在 MySQL 级别进行:
SELECT INET_NTOA(ip) FROM 'log' WHERE
要获取真实 IP 地址,您还需要检查代理:
if (!empty($_SERVER['HTTP_CLIENT_IP'])){
$ip=$_SERVER['HTTP_CLIENT_IP'];
//Is it a proxy address
}elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip=$_SERVER['REMOTE_ADDR'];
}
【讨论】: