我正在 Java Swing 中进行一个考勤项目。每天只能登录一次。
我的项目包含登录页面,该页面有一个从中提供用户名和密码的数据库,我只想确保登录(为员工更新考勤)每天只发生一次。
如何查看日期是否更改?
我正在 Java Swing 中进行一个考勤项目。每天只能登录一次。
我的项目包含登录页面,该页面有一个从中提供用户名和密码的数据库,我只想确保登录(为员工更新考勤)每天只发生一次。
如何查看日期是否更改?
如果有人每天登录一次以上真的很重要吗?实际上,您的要求存在欺骗问题。假设一位同事偷了我的密码,并用它以我的身份登录。然后我进来了,我现在无法登录。最好允许用户随时登录,并显示一条消息“您上次登录时间是 2013 年 6 月 3 日 EDT 上午 8:45”。
如果您需要这个确切的要求,请将上次登录日期作为 SQL DATE 类型存储在数据库中,该类型没有时间。让登录代码看起来像
PreparedStatement ps = conn.prepareStatement(
"SELECT last_logon FROM USERS WHERE username = ? AND passwordHash = ?");
// Please don't store the password itself in the database.
ps.setString(1, username);
ps.setString(2, sha1(password, salt)); // very vague, I know.
ResultSet rs = ps.executeQuery();
if (rs.next()) {
java.sql.Date lastLogin = rs.getDate("last_logon");
// Check that last_logon isn't today.
// Use an UPDATE to update the field.
}
这确实不是 Swing 特定的,甚至不是 Java 特定的。您需要了解您的数据库如何计算消息哈希,以及如何将盐应用于密码。你需要决定盐的来源。
如果您使用的是 Java 日历,您也可以只存储上次登录,然后与当前登录进行比较:
Calendar lastLogin = // however you set this
Calendar currentLogin = // now, again, however you set it
if (currentLogin.get(Calendar.DAY_OF_YEAR) == lastLogin.get(Calendar.DAY_OF_YEAR))
{
// it's the same day
}
创建一个数据库表,用于存储数据的日志数据,login
并有一个列userid
,date
和login
信息。你可以编程如果login
值是0
那么这个人没有登录,否则他登录了。如果你足够聪明,login
甚至不需要列。现在,如果用户尝试登录,请检查表中是否存在针对该用户当天的记录。
就这样