-3

我正在 Java Swing 中进行一个考勤项目。每天只能登录一次。

我的项目包含登录页面,该页面有一个从中提供用户名和密码的数据库,我只想确保登录(为员工更新考勤)每天只发生一次。

如何查看日期是否更改?

4

3 回答 3

3

如果有人每天登录一次以上真的很重要吗?实际上,您的要求存在欺骗问题。假设一位同事偷了我的密码,并用它以我的身份登录。然后我进来了,我现在无法登录。最好允许用户随时登录,并显示一条消息“您上次登录时间是 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 特定的。您需要了解您的数据库如何计算消息哈希,以及如何将盐应用于密码。你需要决定盐的来源。

于 2013-06-03T14:22:04.860 回答
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
 }
于 2013-06-03T18:01:45.077 回答
0

创建一个数据库表,用于存储数据的日志数据,login并有一个列useriddatelogin信息。你可以编程如果login值是0那么这个人没有登录,否则他登录了。如果你足够聪明,login甚至不需要列。现在,如果用户尝试登录,请检查表中是否存在针对该用户当天的记录。

就这样

于 2013-06-03T14:20:37.833 回答