You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何永久保存登录信息变量?账号密码系统开发技术咨询

用户名密码永久存储方案(无需手动添加)

你的需求完全可行,不用手动添加用户数据,通过代码自动处理存储和加载即可,下面是几种实用方案:

  • 本地JSON/CSV文件自动存储
    代码在用户注册时自动将加密后的用户名密码写入文件,程序启动时读取文件加载数据,全程无需手动编辑文件。
    示例伪代码(Python):

    import json
    from passlib.hash import bcrypt
    
    # 保存新用户(注册时调用)
    def save_new_user(username, password):
        # 先读取已有用户,文件不存在则初始化空字典
        try:
            with open('users.json', 'r', encoding='utf-8') as f:
                users = json.load(f)
        except FileNotFoundError:
            users = {}
        # 密码加密后存储,禁止明文
        users[username] = bcrypt.hash(password)
        # 写入文件
        with open('users.json', 'w', encoding='utf-8') as f:
            json.dump(users, f, indent=2)
    
    # 启动时加载所有用户
    def load_all_users():
        try:
            with open('users.json', 'r', encoding='utf-8') as f:
                return json.load(f)
        except FileNotFoundError:
            return {}
    
  • 轻量级数据库(SQLite)
    比文件存储更稳定,适合数据量增长后的场景,同样由代码自动完成建表、写入、读取操作,无需手动维护数据。
    示例伪代码(Python):

    import sqlite3
    from passlib.hash import bcrypt
    
    # 首次运行自动创建用户表
    def init_database():
        conn = sqlite3.connect('user_auth.db')
        cursor = conn.cursor()
        cursor.execute('''
            CREATE TABLE IF NOT EXISTS users (
                username TEXT PRIMARY KEY NOT NULL,
                password_hash TEXT NOT NULL
            )
        ''')
        conn.commit()
        conn.close()
    
    # 注册新用户
    def register_user(username, password):
        hashed_pwd = bcrypt.hash(password)
        conn = sqlite3.connect('user_auth.db')
        cursor = conn.cursor()
        cursor.execute('INSERT INTO users (username, password_hash) VALUES (?, ?)', (username, hashed_pwd))
        conn.commit()
        conn.close()
    
    # 验证用户(登录时调用)
    def verify_user(username, password):
        conn = sqlite3.connect('user_auth.db')
        cursor = conn.cursor()
        cursor.execute('SELECT password_hash FROM users WHERE username = ?', (username,))
        result = cursor.fetchone()
        conn.close()
        return result and bcrypt.verify(password, result[0])
    
  • 关键注意事项

    • 无论用哪种方式,绝对不能存储明文密码,必须用bcrypt、Argon2等专业哈希算法处理后再保存。
    • 若面向多用户或生产环境,优先选择数据库方案,数据可靠性和扩展性更强。
    • 文件存储需设置合适的文件权限,避免被无关程序或用户读取。

内容的提问来源于stack exchange,提问作者eclipz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 02:50:22