python实现简单的登陆验证
来源:互联网 发布:js 拖动方框 流程图 编辑:程序博客网 时间:2024/04/30 07:42
#!/usr/bin/env python# _*_ coding:utf-8 _*_'''login programif your faild 3th,your will be locked输入用户名密码认证成功后显示欢迎信息输错三次后锁定用户输入一次密码就写入到日志中去。记录成功或者失败状态。每次登陆的时候先去看user_lock文件,然后再看login.log 文件如果login.log文件里在三分钟内登陆一直失败过,那么会算上次数。user_lock 文件的格式hansz 2015-10-27 21:31:26.159738'''import getpass,datetime, time, os# 设置锁定时间和错误次数global error_timeerror_time = 3global countcount = 3# 定义登陆成功函数# 打印欢迎信息,并且写入登陆时间到日志中去。def login_succeed(user_name): print "欢迎您,尊敬的 %s" % user_name now_time = str(datetime.datetime.now()) with open("session.log", "a") as f: login_info = "%s login succeed in %s \n" % (user_name, now_time.split(".")[0]) f.write(login_info) return True# 定义登陆失败函数# 每次调用都会传入登陆次数,每次都会减1.# 超过三次就写入到锁文件中去。def login_failed(user_name, count): count = count - 1 if count > 0: print "(密码输入错误,您还有%d次机会)" % count user_passwd = raw_input("请输入密码:") if_passwd_ok(user_name, user_passwd, count) else: print "错误次数超过三次,已锁定账号" os.system("sed -i '/%s/d' user_lock" % user_name) lock_time = str(datetime.datetime.now()) with open("user_lock", "a")as f: lock_info = "%s %s\n" % (user_name, lock_time.split(".")[0]) f.write(lock_info) with open("session.log", "a")as f: faild_info = "%s are locked in %s \n " % (user_name, lock_time.split(".")[0]) f.write(faild_info)# 把用户和登陆时间写入到锁用户文件中去def user_lock(user_name, login_time): with open("user_lock", "a") as f: lock_user = "%s/n" % user_name f.write(lock_user)# 把字符串格式的时间转换为datetime格式def str_to_date(str_date): date_date = datetime.datetime.fromtimestamp(time.mktime(time.strptime(str_date, "%Y-%m-%d %H:%M:%S"))) return date_date# 用于比较登陆时间和锁定时间# 时间超过error_time之后 返回truedef date_compare(str_date_old, str_date_new): print "您现在登陆的时间是%s" % str_date_new date_date_new = str_to_date(str_date_new) date_date_old = str_to_date(str_date_old) diff = (date_date_new - date_date_old) diff_str = str(diff) # print "这个是时间差",int(diff_str.split(":")[0]),int(diff_str.split(":")[1]) if int(diff_str.split(":")[0]) == 0: if int(diff_str.split(":")[1]) >= error_time: return True else: return False elif int(diff_str.split(":")[0]) > 0: return True else: return False# 判断密码是否正确def if_passwd_ok(user_name, user_passwd, count): if count > 0: # 从用户列表里面读取用户名和密码 status0 = 0 with open("user.list", 'r')as f: for i in f.readlines(): # 如果用户名密码正确 if i.split()[1] == user_name: if i.split()[2] == user_passwd: login_succeed(user_name) status0 = 1 break else: login_failed(user_name, count) status0 = 1 break if status0 == 0: print "没有这个用户" else: print "账号被锁定啦。"# 从登陆日志查看是否近三分钟登陆过且登陆失败了# 判断是否被锁定def if_lock(user_name, user_passwd, login_time): # 读取user_lock 文件 status1 = 0 with open("user_lock", 'r') as f: content = f.readlines() if content == []: if_passwd_ok(user_name, user_passwd, count) else: for i in content: # 如果用户名存在在列表当中 if i.split()[0] == user_name: # 查看写入lock文件时的时间,如果超过三分钟就把他删除,如果没有超过三分钟,就拒绝登陆 date_old = "%s %s" % (i.split()[1], i.split()[2]) if date_compare(date_old, login_time): if_passwd_ok(user_name, user_passwd, count) # 删除用户。用linux下的sed os.system("sed -i '/%s/d' user_lock" % user_name) status1 = 1 break # 删除用户 else: print "您在三分钟之内登录三次错误,已被锁定,请稍后再试。" status1 = 1 break else: continue if status1 == 0: if_passwd_ok(user_name, user_passwd, count)# datetime.datetime.fromtimestamp(time.mktime(time.strptime(stringDate,"%Y-%m-%d %H:%M:%S")))print "欢迎登陆系统".center(100)user_name = raw_input("请输入用户名:")#user_passwd=raw_input("enter your passwd")user_passwd = getpass.getpass("请输入密码:")d1 = datetime.datetime.now()login_time = str(d1).split(".")[0]if_lock(user_name, user_passwd, login_time)
0 0
- python实现简单的登陆验证
- 用户登陆与验证的简单实现
- 用户登陆与验证的简单实现
- jsp实现客户登陆的简单验证
- SpringBoot + thymeleaf 实现简单的登陆验证
- Hibernate实现简单登陆验证
- extJs+json实现的一个登陆验证的简单例子
- 【IOS】利用ASIHTTPRequest 实现一个简单的登陆验证
- 【IOS】利用ASIHTTPRequest 实现一个简单的登陆验证
- 【IOS】利用ASIHTTPRequest 实现一个简单的登陆验证
- 【IOS】利用ASIHTTPRequest 实现一个简单的登陆验证
- jsp+servlet+jdbc实现简单的登陆验证
- python实现带验证码网站的自动登陆
- 简单的ajax登陆验证
- python实现简单登陆流程
- 登陆验证码的实现
- 简单的登陆注册的实现+验证码和表单验证
- 利用servlet进行简单的登陆验证
- Latch: Enqueue Hash Chains(Doc ID 445076.1),
- 1、001 集合总介绍和Collection介绍
- 【Unity】使用射线碰撞限制人物主角多次跳跃
- codeblock不能调试的问题
- 黑马程序员——Java中的Enum的使用与分析
- python实现简单的登陆验证
- Linux cd切换目录命令
- 1、002 Collection介绍
- git 使用指南
- 黑马程序员——Java类变量和成员变量初始化过程
- Java类的初始化
- COCOS-3.X事件分发机制-原理
- 1、003 Collection用老式的方法遍历得出元素长度
- Java定时任务(Timer、Quartz、Spring、LinuxCron)