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

如何在ExpressJS中区分请求的来源设备?

在Express中区分同一设备请求的方案

Express的req对象本身没有内置的设备唯一标识——因为HTTP是无状态协议,浏览器的安全限制也不会向服务器暴露客户端硬件级的唯一ID(比如IMEI、MAC地址)。

你可以通过以下方案实现设备级的请求识别:

  • 生成并持久化设备Cookie
    自己生成一个唯一标识符(比如UUID),通过Cookie发送给客户端,后续客户端请求时会自动携带这个Cookie,服务器就能通过它识别同一设备。
    示例代码:

    const { v4: uuidv4 } = require('uuid');
    const express = require('express');
    const app = express();
    
    // 设备识别中间件
    app.use((req, res, next) => {
      let deviceId = req.cookies.deviceId;
      if (!deviceId) {
        deviceId = uuidv4();
        // 设置Cookie,有效期设为1年,httpOnly提升安全性
        res.cookie('deviceId', deviceId, { maxAge: 365 * 24 * 60 * 60 * 1000, httpOnly: true });
      }
      // 将deviceId挂载到req对象,后续路由可直接调用
      req.deviceId = deviceId;
      next();
    });
    
    // 测试路由
    app.get('/', (req, res) => {
      res.send(`当前设备ID:${req.deviceId}`);
    });
    
    server = app.listen(config.port, () => {
      logger.info(`Listening to port ${config.port}`);
    });
    
  • 利用会话(Session)机制
    使用express-session这类会话中间件,每个会话会分配唯一的sessionID并存储在客户端Cookie中。不过会话默认有过期时间,用户清除Cookie或使用隐私模式时会重置会话,更适合短期识别而非长期设备标识。

重要提示

没有任何方案能做到100%可靠的设备唯一识别:

  • 用户可手动清除Cookie,导致标识丢失;
  • 隐私模式下浏览器会隔离Cookie,同一设备也会生成新标识;
  • 客户端可以伪造或修改Cookie值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:37:25