我正在Java Swing的一个考勤项目上工作。登录应该每天只有一次。
我的项目包含登录页面,其中包含一个用户名和密码的数据库,我只想确保每天只进行一次登录(员工的出勤更新)。
如何检查日期是否更改?
答案 0 :(得分:3)
如果有人每天登录多次,这真的很重要吗?实际上,您的要求存在欺骗性问题。假设一位同事偷了我的密码,他用它以我的身份登录。然后我进来了,我现在无法登录。最好允许用户随时登录,并显示“您上次登录于美国东部时间2013年6月3日上午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的。您将需要了解数据库如何计算消息哈希,以及如何将salt应用于密码。你需要决定盐源。
答案 1 :(得分:1)
如果你正在使用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
}
答案 2 :(得分:0)
创建一个数据库表,用于存储login
数据的日志数据,并包含userid
,date
和login
列信息。如果login
值为0
,您可以编程,然后该人没有登录,否则他登录。如果您足够聪明,甚至不需要login
列。现在,如果用户尝试登录,请检查当天针对该用户的记录是否退出。
这就是全部