HTML如何实现记住密码?cookie怎么存储登录状态?

“记住密码”功能的核心是服务器生成持久化凭证并通过cookie存储,而非在html中直接保存密码;2. 当用户勾选“记住我”,服务器验证登录信息后生成唯一令牌(如session id或token),并设置包含该令牌的cookie,其max-age/expires设为长期有效,同时启用httponly、secure和samesite属性以增强安全;3. 浏览器自动存储该cookie,并在后续请求中自动携带,服务器通过验证令牌的有效性与过期时间实现自动登录;4. 不直接在html或客户端存储密码,是因为客户端环境开放,易受xss攻击,明文或加密密码均可能被窃取,严重威胁账户安全;5. cookie通过set-cookie响应头发送,包含name=value、过期时间、路径、域名及安全属性,浏览器在后续请求中自动回传cookie,实现状态保持;6. 其他状态管理方式包括:localstorage/sessionstorage(容量大但易受xss,不适合存敏感信息)、url重写(不安全且体验差)、服务器端会话(安全但消耗资源,需共享存储支持分布式)、jwt(无状态利于扩展,但难撤销且依赖客户端安全存储);7. 最佳实践是结合httponly、secure的cookie与服务器端会话或jwt,确保“记住密码”功能的安全性与可用性,此方案兼顾安全性、可扩展性与用户体验,完整实现用户长期登录状态的可靠管理。

HTML如何实现记住密码?cookie怎么存储登录状态?

“记住密码”这个功能,在HTML层面本身是无法直接实现的,它更多是浏览器和服务器端协同工作的一个结果,而其中核心的“存储登录状态”机制,确实离不开Cookie。简单来说,当你在登录页面勾选“记住我”时,你的浏览器会收到服务器发来的一个特殊“通行证”(也就是一个设置了较长有效期的Cookie),浏览器把它保存起来。下次你再访问时,浏览器会自动把这个“通行证”送回给服务器,服务器一看,哦,原来是老朋友,就让你免密登录了。

解决方案

要实现“记住密码”和保持登录状态,核心思路是服务器生成一个持久化的、安全的凭证,并让客户端(浏览器)存储它,每次请求时带上这个凭证,服务器验证其有效性。

用户登录与勾选“记住我”:用户在登录表单中输入用户名、密码,并勾选“记住我”复选框。这个复选框会向服务器发送一个额外参数,告诉服务器用户希望保持登录状态。

服务器端处理

立即学习“前端免费学习笔记(深入)”;

服务器验证用户提供的用户名和密码。如果验证成功,服务器会生成一个唯一的、不重复的会话ID(Session ID)或一个持久化的登录令牌(Persistent Login Token)。这个令牌通常不是直接的用户ID或密码,而是一个随机字符串,它会关联到数据库中存储的用户信息,以及一个过期时间。如果用户勾选了“记住我”,服务器会设置一个带有这个令牌的Cookie,并将其

Max-Age

Expires

属性设置为一个较长的时间(比如几天、几周甚至几个月)。同时,服务器还会将这个Cookie的

HttpOnly

属性设置为

true

,防止JavaScript访问;

Secure

属性设置为

true

(如果使用HTTPS),确保只在安全连接下发送;

SameSite

属性设置为

Lax

Strict

,以增强CSRF防护。服务器通过HTTP响应头中的

Set-Cookie

将这个Cookie发送给浏览器。

浏览器端存储:浏览器接收到

Set-Cookie

头后,会将这个Cookie存储起来。由于设置了较长的有效期,即使浏览器关闭,这个Cookie也不会立即失效。

后续访问与自动登录

用户下次访问网站时,浏览器会自动将存储的这个Cookie(包含登录令牌)附加到HTTP请求头中发送给服务器。服务器接收到请求后,会从Cookie中读取登录令牌。服务器根据这个令牌去数据库中查找对应的用户信息,并验证令牌的有效性和过期时间。如果令牌有效且未过期,服务器就认为用户已登录,并返回相应的页面内容,无需用户再次输入密码。为了安全,服务器可能还会定期刷新这个令牌,或者在每次验证成功后更新其过期时间。

为什么不直接在HTML里保存密码?

这几乎是所有安全工程师的共识:永远不要在客户端(包括HTML、JavaScript、浏览器存储如LocalStorage)直接保存用户的明文密码,甚至连加密后的密码都不建议直接存。这背后的逻辑其实挺简单的,但却至关重要。

首先,HTML和浏览器环境是相对开放的。你写在HTML里的任何东西,或者通过JavaScript操作DOM、LocalStorage、SessionStorage存储的数据,用户通过开发者工具都能一览无余。想象一下,如果你的密码就明晃晃地躺在那里,哪怕是经过了简单的编码或加密,对于一个稍微懂点技术的人来说,解密并获取它简直是轻而易举。这就像你把家门钥匙藏在门垫下,然后指望小偷找不到一样天真。

其次,XSS(跨站脚本攻击)是一个巨大的威胁。如果你的网站存在XSS漏洞,攻击者可以注入恶意JavaScript代码。这些恶意代码能够轻而易举地读取客户端存储的所有数据,包括那些你自以为“安全”的密码或敏感信息。一旦密码被窃取,用户的账户安全将面临巨大风险,甚至可能导致“撞库攻击”,因为很多人习惯在不同网站使用相同的密码。

所以,“记住密码”的实现,核心在于服务器给客户端一个“信任凭证”,而不是直接把密码的副本给客户端。这个凭证(比如一个Session ID或者一个加密的Token)本身是无意义的,它只在服务器端有对应的映射关系。即使这个凭证被窃取,服务器端也可以通过多种机制(比如检测IP异常、强制下线、定期刷新Token)来降低风险,并且最重要的是,攻击者拿到的不是用户的真实密码,这为用户账户提供了最后一层保护。

Cookie存储登录状态的具体机制是什么?

Cookie作为一种HTTP状态管理机制,它在存储登录状态方面扮演着核心角色。它的工作原理,本质上就是服务器通过HTTP响应头告诉浏览器:“嘿,把这个小数据片(Cookie)存起来,下次你访问我的时候,记得把它带上。”

具体来说,当服务器决定要存储登录状态时,它会在HTTP响应头中加入一个或多个

Set-Cookie

字段。例如:

Set-Cookie: session_token=abcdef123456; Expires=Wed, 21 Oct 2024 07:28:00 GMT; Path=/; HttpOnly; Secure; SameSite=Lax

这里面包含了几个关键部分:

session_token=abcdef123456

: 这是Cookie的

name=value

对。

session_token

是Cookie的名称,

abcdef123456

就是服务器为当前用户生成的唯一登录凭证。这个值通常是一个随机且复杂的字符串,它在服务器端对应着用户的会话信息。

Expires

Max-Age

: 这是决定Cookie生命周期的关键。

Expires

指定了一个具体的过期时间点,而

Max-Age

则指定了从现在开始Cookie的有效秒数。如果这两个都没有设置,它就是一个会话Cookie,浏览器关闭就失效。但对于“记住密码”功能,我们通常会设置一个很长的过期时间,让它成为持久化Cookie。

Path

: 规定了Cookie在哪些路径下会被发送。比如

/

表示整个网站的任何路径都会发送这个Cookie。

Domain

: 规定了Cookie属于哪个域名。通常设置为当前域名,避免被其他域名访问。

HttpOnly

: 这是一个非常重要的安全属性。当设置为

true

时,JavaScript就无法通过

document.cookie

等方式访问这个Cookie。这大大降低了XSS攻击获取会话凭证的风险。

Secure

: 当设置为

true

时,Cookie只会在HTTPS连接下发送。这确保了Cookie在传输过程中不会被窃听,防止中间人攻击。

SameSite

: 这是一个相对较新的安全属性,用于防止CSRF(跨站请求伪造)攻击。它可以设置为

Lax

Strict

None

Lax

模式下,只有在顶层导航(比如直接点击链接)时才会发送Cookie,而

Strict

则更加严格,几乎只在同源请求中发送。

当浏览器收到这样的

Set-Cookie

头后,就会将这个Cookie存储起来。在用户后续对该域名和路径下的请求中,浏览器会自动在HTTP请求头中带上这个Cookie,例如:

Cookie: session_token=abcdef123456

服务器接收到请求后,会从这个

Cookie

头中解析出

session_token

的值,然后用这个值去数据库或缓存中查找对应的用户会话信息,从而判断用户是否已登录,并进行相应的处理。整个过程对用户来说是透明的,实现了无感知的登录状态保持。

除了Cookie,还有哪些方式可以实现用户状态管理?各自有什么优缺点?

虽然Cookie是实现“记住密码”和会话管理的主流且推荐方式,但在更广义的用户状态管理中,我们还有其他一些工具,各自有其适用场景和优缺点。

1. LocalStorage 和 SessionStorage

特点: 这两者都是Web Storage API的一部分,允许在浏览器端存储键值对数据。

LocalStorage

数据是持久化的,除非手动清除,否则会一直存在;

SessionStorage

数据则只在当前会话(浏览器标签页)有效,标签页关闭后数据即被清除。优点:容量更大: 通常比Cookie的4KB限制大得多(5MB或更多)。不随请求发送: 存储的数据不会像Cookie那样自动附加到每个HTTP请求中,减少了网络流量。易于JavaScript操作: 可以直接通过JavaScript API进行读写。缺点:安全性较低: 它们的数据完全暴露在客户端,容易受到XSS攻击。恶意JavaScript可以轻易读取和篡改这些数据。因此,绝对不适合存储敏感信息,尤其是像登录令牌这样的凭证无法设置HttpOnly/Secure: 没有内置机制来防止JavaScript访问或强制HTTPS传输。不能直接用于服务器会话: 服务器无法直接读取这些存储,需要通过JavaScript手动读取后在请求中发送。适用场景: 存储非敏感的用户偏好设置、离线数据、前端界面的状态等。例如,记住用户的UI主题选择、购物车内容(未登录状态下)、表单草稿等。

2. URL 重写(Query Parameters)

特点: 将状态信息直接附加在URL的查询参数中,例如

http://example.com/page?sessionid=abcde

优点:简单直接: 实现起来非常简单,不需要Cookie或其他复杂机制。无浏览器限制: 几乎所有浏览器都支持。缺点:安全性极差: 状态信息直接暴露在URL中,容易被窃取、记录在浏览器历史、服务器日志中,并可能在分享URL时泄露。用户体验差: URL会变得很长且不美观。无法跨页面保持: 每次页面跳转都需要手动传递参数,容易遗漏或出错。SEO不友好: 搜索引擎可能会将带有不同参数的URL视为不同的页面。适用场景: 几乎不推荐用于用户状态管理,只适用于一些非常简单的、无敏感信息的、短期的页面间数据传递。

3. 服务器端会话 (Session)

特点: 这是与Cookie结合最紧密且最常见的会话管理方式。浏览器端只存储一个Session ID(通常放在Cookie里),而实际的会话数据(如用户ID、权限等)都存储在服务器端(内存、数据库、Redis等)。优点:安全性高: 敏感数据不暴露在客户端。即使Session ID被窃取,攻击者也无法直接获取用户详细信息,且服务器端可以强制会话失效。灵活: 服务器可以随时修改或清除会话数据。控制力强: 服务器可以根据业务逻辑对会话进行更精细的管理。缺点:服务器资源消耗: 大量用户会话会占用服务器内存或存储资源。可扩展性挑战: 在分布式系统中,会话共享和同步可能变得复杂(需要使用共享存储如Redis)。依赖Cookie: 如果用户禁用Cookie,这种方式就无法工作。适用场景: 绝大多数需要安全、可靠的用户登录状态和会话管理的Web应用。

4. JWT (JSON Web Tokens)

特点: JWT是一种紧凑、URL安全的机制,用于在各方之间安全地传输信息。它通常由三部分组成:Header(头部)、Payload(载荷)和Signature(签名)。Payload中可以包含用户ID、角色等“声明”(claims)。优点:无状态 (Stateless): 服务器不需要存储会话信息,每次请求都通过验证JWT的签名来确定用户身份,这非常有利于分布式系统的扩展。可伸缩性: 减轻了服务器的会话存储压力。跨域认证: 可以方便地用于不同服务之间的认证。缺点:无法直接撤销: 一旦签发,在过期前无法直接在服务器端使其失效(除非引入黑名单机制或短生命周期+刷新令牌)。令牌体积: 如果Payload中包含太多信息,令牌会变大,增加网络开销。安全性依赖于存储: 虽然JWT本身是签名的,但如果存储在客户端(如LocalStorage)的JWT被XSS窃取,攻击者就能冒充用户,直到令牌过期。因此,通常建议将JWT存储在

HttpOnly

的Cookie中,或者与刷新令牌机制结合使用。适用场景: 微服务架构、API认证、单点登录(SSO)等需要无状态或跨服务认证的场景。在“记住密码”功能中,通常会使用一个短生命周期的访问令牌(Access Token)和一个长生命周期的刷新令牌(Refresh Token),刷新令牌通常会存储在

HttpOnly

的Cookie中。

每种方式都有其独特的优劣,选择哪种取决于具体的业务需求、安全要求以及系统的架构。对于“记住密码”这种涉及到用户身份认证的关键功能,安全性是第一位的,因此基于

HttpOnly

Secure

的Cookie结合服务器端会话管理或JWT是当前最推荐的实践。

以上就是HTML如何实现记住密码?cookie怎么存储登录状态?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1572971.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
将 iframe 元素像 div 元素一样使用:移除滚动条并避免内容溢出
上一篇 2025年12月22日 15:03:36
HTML如何制作幻灯片?纯CSS轮播图怎么实现?
下一篇 2025年12月22日 15:03:47

相关推荐

  • 将越狱问题转换为求解逻辑推理题:「滥用」推理能力让LLM实现自我越狱

    将越狱问题转换为求解逻辑推理题:「滥用」推理能力让LLM实现自我越狱将越狱问题转换为求解逻辑推理题:「滥用」推理能力让LLM实现自我越狱将越狱问题转换为求解逻辑推理题:「滥用」推理能力让LLM实现自我越狱将越狱问题转换为求解逻辑推理题:「滥用」推理能力让LLM实现自我越狱

    北京航空航天大学、360 ai 安全实验室、新加坡国立大学和南洋理工大学的研究团队联合发布了一项关于大型语言模型(llms)安全性的重要研究成果。该研究提出了一种名为“推理增强对话”(race)的新型多轮攻击框架,能够有效突破llms的安全对齐机制。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜…

    2026年8月28日 用户投稿
    000
  • 如何解决PHP中复杂姓名解析问题?使用theiconic/name-parser库可以!

    可以通过一下地址学习composer:学习地址 在开发一个处理用户信息的应用时,我遇到了一个复杂的问题:如何准确地解析用户输入的全名?用户的姓名可能包含称呼(如mr、mrs)、名字、中间名、姓氏、后缀(如jr、iii)等部分,并且这些名字可能来自不同的语言和文化背景。起初,我尝试了简单的字符串分割方…

    用户投稿 2026年8月28日
    500
  • 如何解决CampaignMonitorAPI集成问题?使用Composer和createsend-php库可以轻松实现!

    可以通过一下地址学习composer:学习地址 在开发一个电子邮件营销系统时,我遇到了一个棘手的问题:如何高效地集成campaign monitor api。虽然我知道campaign monitor提供了强大的api,但我不知道如何在php项目中无缝集成它。尝试了各种方法后,我终于找到了一个完美的…

    用户投稿 2026年8月28日
    000
  • Kafka消费者提交偏移量失败:如何排查“The coordinator is not aware of this member”异常?

    kafka consumer提交偏移量异常排查 在使用KafkaConsumer.commitSync()方法提交消费位移时,偶尔会遇到Offset commit failed on partition xxx-0 at offset xxx: The coordinator is not awar…

    用户投稿 2026年8月28日
    000
  • ios16怎么隐藏照片

    一、通过相册自带功能隐藏 打开“照片”应用,定位到你想隐藏的图片。点击右上角的“选择”,勾选目标照片后,点击左下角的“分享”按钮。在分享菜单中向左滑动,找到“隐藏”选项并点击确认。此时,所选照片将自动移入“隐藏”相册。如需查看这些内容,只需进入“相簿”页面,向下滚动即可找到“隐藏”相册。 二、利用A…

    2026年8月28日
    000
  • NetSarang(Xshell)旗下推出了一款跨平台SSH客户端PortX

    NetSarang(Xshell)旗下推出了一款跨平台SSH客户端PortXNetSarang(Xshell)旗下推出了一款跨平台SSH客户端PortXNetSarang(Xshell)旗下推出了一款跨平台SSH客户端PortXNetSarang(Xshell)旗下推出了一款跨平台SSH客户端PortX

    netsarang公司此前以xshell/xftp/xmanager等产品闻名,这些软件最初仅支持windows平台。为了拓展市场,netsarang近期推出了一款跨平台ssh客户端portx,支持mac、windows、linux三大操作系统。目前,portx可免费下载使用,为ssh客户端市场增添…

    2026年8月28日 用户投稿
    000
  • 谷歌浏览器为什么打字的时候有明显延迟_谷歌浏览器输入延迟原因分析

    首先禁用硬件加速并检查扩展程序,清除缓存与重置设置可解决谷歌浏览器输入延迟问题。具体操作包括添加–disable-gpu参数、关闭冲突扩展、清除所有时间的缓存数据及恢复默认设置,最终在Dell XPS 13的Windows 11环境下有效改善文本输入卡顿现象。 如果您在使用谷歌浏览器输入…

    2026年8月28日
    100
  • 三星旗舰机型上新!现在就能用上的AI手机

    7月9日,三星galaxy全球新品发布会正式发布了最新z系列机型galaxy z fold7、zflip7、zflip7 fe。 Galaxy Z Fold7融合了三星精湛的工艺设计、专业级影像系统以及最新的GalaxyAI技术,成为一款标志性产品。它实现了多模态智能助手与折叠形态的深度结合,将大屏…

    2026年8月28日
    000
  • 清华大学扩招:着力培养人工智能与多学科交叉的复合型人才

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 清华大学宣布适度扩大2025年本科招生规模,计划新增约150个名额,并同步成立新的本科通识书院。此举旨在培养人工智能与多学科交叉融合的复合型人才,提升创新人才自主培养能力,更好地服务国家战略和社…

    2026年8月28日
    000
  • 拼多多退货时间有限制吗_拼多多退货时间限制详细说明

    拼多多退货时间有限制吗_拼多多退货时间限制详细说明拼多多退货时间有限制吗_拼多多退货时间限制详细说明拼多多退货时间有限制吗_拼多多退货时间限制详细说明拼多多退货时间有限制吗_拼多多退货时间限制详细说明

    签收次日起7天内可申请无理由退货,15天内可因质量问题退货,生鲜商品需在2小时内提交变质证据,申请通过后须7天内寄出商品,换货商品签收后7天内可再次退货。 如果您在拼多多平台购物后需要申请退货,平台对不同类型的订单和商品都设定了明确的时间节点。了解这些时间限制能有效保障您的权益。以下是关于退货申请、…

    2026年8月28日 用户投稿
    600
  • 如何设置UEFI启动_BIOS模式切换教程

    要将电脑启动模式从传统bios切换到uefi,必须先进入固件设置界面(通常在开机时按del、f2、f10或f12键),找到“boot”或“security”选项卡,1. 禁用兼容支持模块(csm)或设置“boot mode”为“uefi only”;2. 确保启用uefi启动模式;3. 可选但推荐启…

    2026年8月28日
    100
  • ThinkPHP ORM 详解:模型操作与关联查询

    thinkphp 的 orm 系统通过模型操作和关联查询提高开发效率。1)模型操作:通过对象方式操作数据库,如创建用户并保存。2)关联查询:支持多种关联类型,允许通过模型关系查询数据,如用户与文章的一对多关联。使用 thinkphp 的 orm 可以简化开发过程并高效处理复杂数据关系。 引言 在现代…

    2026年8月28日
    000
  • 如何解决Composer命令在生产环境中的安全问题?使用php-tuf/composer-stager可以!

    可以通过一下地址学习composer:学习地址 在处理 php 项目时,更新依赖库是常见操作。然而,当你在生产环境中直接运行 composer 命令时,可能会遇到一些棘手的问题。最近,我在维护一个基于 php 的网站时,遇到的问题是如何在不影响用户体验的情况下安全地更新依赖库。我尝试了几种方法,但都…

    用户投稿 2026年8月28日
    000
  • linux怎么安装redis扩展

    linux怎么安装redis扩展linux怎么安装redis扩展linux怎么安装redis扩展linux怎么安装redis扩展

    linux怎么安装redis扩展? 相关推荐:【Linux视频教程】 linux安装redis扩展的方法: 1、首先下载php-redis扩展包 2、解压拆包后进入目录,可以看到如下: 3、在该目录下执行php安装目录下的phpize命令(如不知道phpize路径  可以使用whereis phpi…

    2026年8月28日 用户投稿
    000
  • 电子科技大学团队在全球计算机视觉顶会CVPR 2025发表多篇论文

    电子科技大学团队在全球计算机视觉顶会CVPR 2025发表多篇论文电子科技大学团队在全球计算机视觉顶会CVPR 2025发表多篇论文电子科技大学团队在全球计算机视觉顶会CVPR 2025发表多篇论文电子科技大学团队在全球计算机视觉顶会CVPR 2025发表多篇论文

    计算机(网安)学院数据智能团队cvpr 2025会议六篇论文录用 2025年IEEE国际计算机视觉与模式识别会议(CVPR)已公布论文接收结果,计算机(网安)学院数据智能团队(DIG)喜报频传,共有六篇论文被录用,接收率高达22.1%。 这六篇论文涵盖了计算机视觉领域的多个前沿方向,展现了团队在该领…

    2026年8月28日 用户投稿
    000
  • 墨甲机器人首届中国市场招商会在京成功举办

    墨甲机器人首届中国市场招商会在京成功举办墨甲机器人首届中国市场招商会在京成功举办墨甲机器人首届中国市场招商会在京成功举办墨甲机器人首届中国市场招商会在京成功举办

    汽车与人形机器人携手开启智能零售新时代 由AiMOGA墨甲机器人与奇瑞汽车联合主办的「墨甲机器人首届中国市场招商大会」于北京首都国际会议中心圆满落幕。此次会议以销售为核心,面向全国招募人形机器人销售渠道合作伙伴,吸引了超过3000家汽车经销商到场参与,标志着墨甲机器人商业化进程正在加速推进。 7月9…

    2026年8月28日 用户投稿
    000
  • 电脑出现xboxgip.sys错误_游戏外设驱动修复

    出现xboxgip.sys错误时,首先应检查并重装游戏控制器驱动,进入设备管理器卸载相关设备并勾选删除驱动程序,重启后让系统自动重装或手动从微软官网下载最新驱动;2. 运行sfc /scannow命令修复系统文件完整性,若无效则继续执行dism /online /cleanup-image /res…

    2026年8月28日
    000
  • 重磅 | GitHub 已确认被微软收购!

    github作为一个庞大的代码库,已成为开发人员和公司托管项目、文档和代码的首选平台。苹果、亚马逊、谷歌等众多科技巨头都使用github。微软是该平台的最大贡献者,拥有超过1000名员工积极推送代码到github上的存储库中。微软甚至在github上公开托管了原始windows文件管理器的源代码。2…

    2026年8月28日
    100
  • 百家号怎么过原创?百家号过不了原创的原因

    在如今这个信息爆炸的时代,百家号作为一个内容创作平台,吸引了大量创作者入驻。想要在百家号上获得原创标签,并非易事。本文将为大家分享一些过原创的技巧,帮助大家在百家号上提升内容质量。 一、了解原创标准 我们要明确百家号的原创标准。根据官方说明,原创内容需满足以下条件: 1. 内容必须是作者本人原创,不…

    2026年8月28日
    100
  • 如何解决PHP中HTTP请求和响应的标准化问题?使用nimbly/capsule可以!

    可以通过一下地址学习composer:学习地址 在开发一个需要频繁处理http请求和响应的php项目时,我遇到了一个棘手的问题:如何在不同的框架和库之间统一处理这些请求和响应?尽管php提供了丰富的内置函数来处理http,但这些函数在不同环境下的行为可能会有所不同,导致代码难以维护和扩展。 为了解决…

    用户投稿 2026年8月28日
    300

发表回复

登录后才能评论
关注微信