账号和密码没有报错,提交登录后地址短暂跳转,随后又回到管理员登录页。这类问题通常不是“密码不对”,而是服务器建立了管理员 Session,浏览器却没有在下一次请求带回正确的 Session Cookie。

下面按一次真实登录请求来查,不先清全部缓存,也不直接改数据库。

第一步:在浏览器确认 Cookie 有没有种下

打开开发者工具的 Network,勾选 Preserve log,再提交一次登录。找到登录 POST,重点看两处:

  • 响应头是否包含 Set-Cookie
  • 紧接着的后台 GET 请求是否带上同名 Cookie。

POST 没有 Set-Cookie,查 PHP Session 或 Magento 日志;有 Set-Cookie、下一跳没带,通常是 Domain、Path、Secure 或 SameSite 不匹配。浏览器 Issues 面板会直接说明 Cookie 被拒绝的原因。

第二步:只读出真正生效的 URL 与 Cookie 配置

bin/magento config:show web/secure/base_url
bin/magento config:show web/secure/use_in_adminhtml
bin/magento config:show web/cookie/cookie_domain
bin/magento config:show web/cookie/cookie_path
bin/magento config:show web/cookie/cookie_httponly
bin/magento config:show web/cookie/cookie_lifetime

如果后台访问地址是 admin.example.com,Cookie Domain 却写成另一个域名,浏览器不会回传。单站点一般可以让 Cookie Domain 留空;多子域共享时才使用类似 .example.com,但必须先确认不会把后台 Session 扩散给不需要的子域。

遇到 HTTPS 代理,先证明 Magento 看到的协议

负载均衡器对外是 HTTPS,回源却是 HTTP 时,Magento 需要从可信代理头识别原始协议。用 Web Server 日志记录 X-Forwarded-Proto,并比较登录 POST 的 Location:

curl -skI https://admin.example.com/admin/
curl -sk -D- -o /dev/null https://admin.example.com/admin/

如果跳转在 http/https 或两个主机名之间来回,先修代理与 Base URL,不能靠延长 Cookie Lifetime 解决。不要把 Secure Cookie 关闭来迁就错误的 HTTPS 识别。

数据库配置需要按 scope 查

SELECT scope, scope_id, path, value
FROM core_config_data
WHERE path IN (
 'web/secure/base_url',
 'web/secure/use_in_adminhtml',
 'web/cookie/cookie_domain',
 'web/cookie/cookie_path'
)
ORDER BY path, scope, scope_id;

发现重复 scope 后,先备份具体记录,再通过 bin/magento config:set 或后台修正。不要直接删除所有 web 配置。配置改完执行:

bin/magento cache:clean config
bin/magento cache:clean full_page

Cookie 正常仍回登录页,再检查 Session 后端

多 Web 节点若使用本地文件 Session,请求落到另一台机器就会丢登录状态。确认 app/etc/env.php 的 session save 配置、Redis 连通性、TTL、前缀和各节点配置一致。只在一台节点成功,是非常明确的证据。

grep -n "session" app/etc/env.php
redis-cli -h REDIS_HOST ping
redis-cli -h REDIS_HOST info memory

生产日志不要打印 Session ID。修复后的判断标准不是“偶尔能登录”,而是无痕窗口连续登录、刷新、切换后台页面和退出都稳定;同时 Cookie 的 Domain、Path、Secure、HttpOnly 符合预期。