Python中指定密钥过期时间设置及批量配置问题
解决方案
问题分析
原代码存在三个核心问题:
- 每次运行都会重新生成密钥的过期时间,无法保留之前的计时状态
- 没有持久化存储机制,重启程序后密钥过期信息丢失
- 仅支持单个固定密钥,无法管理多密钥的过期逻辑
修改后实现代码
import json from datetime import datetime, timedelta import os # 存储密钥过期信息的文件路径 STORAGE_FILE = "key_expirations.json" def load_key_storage(): """加载存储的密钥过期信息""" if os.path.exists(STORAGE_FILE): with open(STORAGE_FILE, "r") as f: data = json.load(f) # 将字符串格式的时间转成datetime对象 for key in data: data[key] = datetime.fromisoformat(data[key]) return data return {} def save_key_storage(storage_data): """保存密钥过期信息到文件""" # 将datetime对象转成字符串格式存储 serializable_data = {k: v.isoformat() for k, v in storage_data.items()} with open(STORAGE_FILE, "w") as f: json.dump(serializable_data, f, indent=2) def check_key_validity(input_key): """检查输入密钥的有效性:是否存在、是否过期""" storage = load_key_storage() if input_key not in storage: # 密钥首次使用,设置1分钟后过期 expiration_time = datetime.now() + timedelta(minutes=1) storage[input_key] = expiration_time save_key_storage(storage) return True, expiration_time else: expiration_time = storage[input_key] if datetime.now() > expiration_time: return False, expiration_time else: return True, expiration_time # 主逻辑 user_input = input("Enter your license Key: ") is_valid, exp_time = check_key_validity(user_input) if is_valid: print("Successfully Loaded") print(f"Expiration: {exp_time.strftime('%Y-%m-%d %H:%M:%S')}") else: print("Key Expired") input("Press any Key to close")
代码说明
- 持久化存储:使用JSON文件
key_expirations.json保存每个密钥的过期时间,程序重启后仍能读取之前的记录 - 首次使用计时:当密钥第一次被输入时,才初始化1分钟的过期时间,后续使用不会刷新过期时间
- 多密钥支持:存储结构采用字典,可同时管理多个不同密钥的过期信息
- 过期检查:每次输入密钥时,会先读取存储的过期时间,判断当前时间是否已超过过期时间
内容的提问来源于stack exchange,提问作者Oliver
相关产品推荐
相关产品推荐

