Skip to content

[Bug] subscription-userinfo 响应头 expire=0 导致代理软件显示1970/1/1到期 #257

Description

@wynx1123

问题描述

所有订阅链接的 subscription-userinfo 响应头中 expire 字段始终为 0

subscription-userinfo: upload=0; download=0; total=0; expire=0

Unix timestamp 0 = 1970-01-01 00:00:00,所以导入到任意代理软件(Shadowrocket、v2rayN、Clash Verge 等)后到期时间全部显示为 1970/1/1

环境

  • SublinkPro v1.2.16
  • Docker: zerodeng/sublink-pro:latest
  • 数据库 subscription_sharesexpire_at 字段有正确到期时间

复现

curl -sI 'https://domain/c/?token=TOKEN&target=clash' | grep subscription-userinfo
# 输出: subscription-userinfo: upload=0; download=0; total=0; expire=0

数据库中 expire_at 存了正确的 2026-08-16 15:48:00+08:00,但没有被转换成 Unix 时间戳写入响应头。

期望

subscription-userinfo: upload=0; download=0; total=0; expire=1786866480

(1786866480 = 2026-08-16 15:48:00 CST)

建议修复

在订阅请求 handler 中根据 subscription_shares 表的 expire_type / expire_days / expire_at 计算:

expire_type 逻辑
0(永不过期) expire=0 或不输出
1(按天数) expire = now_ts + expire_days * 86400
2(绝对日期) expire = unixtime(expire_at)

响应头规范参考

https://www.davidc.net/sites/default/subscriptions/subscription-userinfo.md

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions