我试着制作我们软件的试用版。但是我做不好。当我的系统中的时钟发生变化时,它就不工作了。
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Calendar expiredate = Calendar.getInstance();
try {
Date date = sdf.parse("24/06/2015");
expiredate.setTime(date);
if (Calendar.getInstance().after(expiredate)) {
JOptionPane.showMessageDialog(null, "Sorry your software has expired", "Expire",
JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
} catch(ParseException e) {
// ...
}
你必须决定你想花多少精力。如果您的应用程序仅在客户端的系统上运行(意味着:它不需要连接到中央服务器)。。。那么你的选择就非常有限了。
当然,您的应用程序可以保存日期/时间戳。。。但当人们开始篡改系统时钟时,这并没有帮助。
长话短说:你应该在"易于实现;但可能很容易规避"one_answers"难以实现;因此可能很容易出错"之间取得平衡。换句话说:请记住,这种"许可证检查功能"可能会让您的潜在客户很难使用该软件。或者"更糟":你花了很多时间来寻找这个问题的"伟大的安全解决方案",在实现它的同时,你在软件中添加了各种错误。不要低估找到一个有动力的用户无法破解的解决方案所需的努力。。。
最后建议;尝试一种不同的方法:专注于使用您的应用程序创建出色的用户体验(但可能使用受限的功能集)。只要让你的客户相信你的应用程序值得花钱;并且不提供"试用许可证";但它是一个免费的"试用版",功能不如真正的产品。
$sql ='SELECT * FROM finsys.user
WHERE username= "$user" AND password = "$pass"
AND now() <= "20-Dec" ';
如果是,则从数据库中删除用户记录。。
客户不会在一段时间内更改系统日期更改。如果他们显示试用消息,那么他们可以更改系统日期。
不要提供任何试用消息。。将消息提供为"用户身份验证失败"。。他们将无法知道为什么会发生这种情况;在DB更改之前。。