【前端】【面試】【業務場景】前端如何獲取并生成設備唯一標識

? 總結

問題:前端如何獲取并生成設備唯一標識?
核心要點:瀏覽器原生信息有限,但通過組合多個維度可生成設備指紋(Device Fingerprint),用于唯一標識設備。
常見方式

  1. 瀏覽器信息(User-Agent)
  2. 屏幕與系統參數
  3. 本地存儲標識(localStorage / cookie)
  4. 第三方指紋庫(如 FingerprintJS)

① 為什么需要設備唯一標識?

  • ? 后端識別是否為同一臺設備
  • ? 登錄狀態、權限控制、風控策略等使用場景
  • ? 可實現“同一賬號僅允許一臺設備登錄”等安全機制

② 前端可獲取的設備信息

類型示例屬性說明
瀏覽器信息navigator.userAgent, navigator.language瀏覽器類型、語言、系統平臺等
屏幕參數screen.width, screen.height, pixelRatio屏幕分辨率與像素密度
系統參數navigator.platform, timezone, hardwareConcurrency操作系統、時區、CPU 核心數
渲染能力Canvas, WebGL, AudioContextGPU/聲卡差異,適用于設備指紋
本地存儲localStorage, cookie可用于持久保存唯一標識(如 UUID)
網絡信息(通過后端獲取)或 WebRTC 獲取 IP用于大致標識網絡位置,但不唯一

?? 單獨一項不唯一,組合后識別率更高


③ 如何生成設備指紋?

? 方法一:手動組合信息(入門用)

const raw = [navigator.userAgent,screen.width,screen.height,navigator.language,new Date().getTimezoneOffset()
].join('|');const deviceId = btoa(raw); // 簡單 Base64 編碼

缺點:變動大、不穩定、識別率低。


? 方法二:使用 FingerprintJS(推薦)

<script src="https://openfpcdn.io/fingerprintjs/v3"></script>
<script>FingerprintJS.load().then(fp => {fp.get().then(result => {const visitorId = result.visitorId; // 穩定的設備唯一 IDconsole.log(visitorId);// 可在登錄請求中一并傳給后端});});
</script>

優點

  • 穩定性高
  • 基于 Canvas/WebGL/Audio 等綜合特征生成
  • 識別率高,適合安全需求場景

④ 各方式對比總結

方式優點缺點
手動組合指紋實現簡單不穩定,識別率低
localStorage UUID持久化強容易被用戶清除
FingerprintJS識別率高、穩定性好依賴第三方庫
IP 地址識別網絡識別粗略共享網絡環境下重復可能大

⑤ 推薦實踐方案(通用、安全)

  1. ? 設備指紋優先(如 FingerprintJS 提供的 visitorId
  2. ? 本地 UUID fallback:寫入 localStorage,防止指紋識別失敗
  3. ? 登錄時上傳 device_token 到后端,用于登錄設備校驗

💡 小貼士

  • 后端可以使用 Redis 緩存 user_id -> device_token,實現設備綁定或擠掉舊設備。
  • 可擴展“設備管理”、“異地登錄提醒”等功能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79936.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79936.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79936.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

極刻AI搜v1.0 問一次問題 AI工具一起答

軟件名&#xff1a;極刻AI搜 版本&#xff1a;v1.0 功能&#xff1a;囊括了互聯網上比較好用的一些支持”搜索“的網站或者工具 開發平臺&#xff1a;nodepythonweb 分類有&#xff1a; AI搜索&#xff08;支持智能問答的AI搜索引擎&#xff09; 常規搜索&#xff1a;&#xff…

《2025最新Java面試題全解析:從基礎到高并發架構設計》

25年Java開發者面試中最常考察的100道面試題&#xff0c;涵蓋Java基礎、JVM、多線程、Spring框架、分布式系統等核心知識點&#xff0c;并結合大廠真實面試案例進行深度解析&#xff0c;助你順利通過技術面試。 一、Java基礎篇&#xff08;高頻15問&#xff09; 1. HashMap底層…

[c語言日寄]免費文檔生成器——Doxygen在c語言程序中的使用

【作者主頁】siy2333 【專欄介紹】?c語言日寄?&#xff1a;這是一個專注于C語言刷題的專欄&#xff0c;精選題目&#xff0c;搭配詳細題解、拓展算法。從基礎語法到復雜算法&#xff0c;題目涉及的知識點全面覆蓋&#xff0c;助力你系統提升。無論你是初學者&#xff0c;還是…

51c嵌入式~單片機~合集5~DMA

我自己的原文哦~ https://blog.51cto.com/whaosoft/12940885 一、DMA DMA&#xff0c;全稱Direct Memory Access&#xff0c;即直接存儲器訪問。 DMA傳輸將數據從一個地址空間復制到另一個地址空間&#xff0c;提供在外設和存儲器之間或者存儲器和存儲器之間的高速數據傳輸…

Linux隨記(十七)

一、綜合報錯&#xff1a;fork: Cannot allocatte memory 和 modues is unknwon 和 pam_limits(crond:session) : unknwon limit item ‘noproc’ 1.1 fork: Cannot allocatte memory 處理 - 隨記 排查時間2025年4月。 環境描述&#xff1a; 2014年左右的服務器&#xff0c;…

支持mingw g++14.2 的c++23 功能print的vscode tasks.json生成調試

在mingw14.2版本中, print庫的功能默認沒有開啟, 生成可執行文件的tasks.json里要顯式加-lstdcexp, 注意放置順序. tasks.json (支持mingw g14.2 c23的print ) {"version": "2.0.0","tasks": [{"type": "cppbuild","…

賦能能源 | 智慧數據,構建更高效智能的儲能管理系統

行業背景 隨著新能源產業的快速發展&#xff0c;大規模儲能系統在電力調峰、調頻及可再生能源消納等領域的重要性日益凸顯。 儲能電站作為核心基礎設施&#xff0c;其能量管理系統&#xff08;EMS&#xff09;需要處理海量實時數據&#xff0c;包括電池狀態、功率變化、環境監…

使用 Flutter 遇坑小計

前言 首先, 谷哥很貼心地為國內用戶準備了一份使用手冊 不過很遺憾 就算你照著它的手冊來了, 還是會在后續使用中遇到其它的坑 今天我踩了, 保不齊明天就是其他人(lol) running gradle task ‘assembledebug’ stuck 首先去確定下當下Android Studio(或者說你目前的Flutter項…

鏈表與文件

鏈表 單鏈表 1.鏈表的初始化 typedef struct node {char name[100];int number;struct node *next; }Node,*LinkList;}Node;2.鏈表的初始化函數(Initlist) LinkList InitList() {LinkList head;head(Node*)malloc(sizeof(Node));head->nextNULL;return head; }3.建立鏈…

uniapp打ios包

uniapp在windows電腦下申請證書并打包上架 前言 該開發筆記記錄了在window系統下&#xff0c;在蘋果開發者網站生成不同證書&#xff0c;進行uniapp打包調試和上線發布&#xff0c;對window用戶友好 注&#xff1a;蘋果打包涉及到兩種證書&#xff1a;開發證書 和 分發證書 …

OpenCV 圖形API(48)顏色空間轉換-----將 LUV 顏色空間的圖像數據轉換為 BGR 顏色空間函數LUV2BGR()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 將圖像從LUV顏色空間轉換為BGR顏色空間。 該函數將輸入圖像從LUV顏色空間轉換為BGR。B、G和R通道值的常規范圍是0到255。 輸出圖像必須是8位無符…

HOW MUCH POSITION INFORMATION DO CONVOLUTIONAL NEURAL NETWORKS ENCODE?

1. 動機: 卷積神經網絡中的卷積操作實際上是一個局部的操作,這樣的話就會使得它雖然知道自己看的是什么,但是卻不清楚他在圖像中的位置信息,但是位置信息實際上是很有用的,因此CNN可能潛在的學習到了如何去編碼這種位置信息。所以這篇論文就是為了研究這種位置信息是如何在…

56、如何快速讓?個盒??平垂直居中

在網頁開發中&#xff0c;有多種方式能讓一個盒子實現水平垂直居中。下面為你介紹幾種常見且快速的方法。 1. 使用 Flexbox 布局 Flexbox 是一種非常便捷的布局模型&#xff0c;能夠輕松實現元素的水平和垂直居中。 html <!DOCTYPE html> <html lang"en"&…

RAG應用過程監控系統選型:LangFuse

Langfuse 是一個開源的大語言模型&#xff08;LLM&#xff09;工程平臺&#xff0c;旨在協助團隊構建、調試和改進由人工智能驅動的應用程序。憑借其全面的工具套件&#xff0c;Langfuse 使開發者能夠深入洞察其 LLM 應用程序&#xff0c;并優化性能。 Stars 數10,522Forks 數9…

Java+nanomsg快速實現去broker的數據通信

先說一下nanomsgJava需要做什么&#xff1a; 1、nanomsg的so文件的制作與放置路徑 2、Java代碼引入nanomsg的依賴 3、支持Socket參數的調節&#xff08;包括ipv4/ipv6的網絡支持&#xff09; 在我目前的認知范圍內要與一個通訊目標實現數據交互通常有這些方式 1、broker中間人…

lightgbm原理、特殊點、參數分析

lightgbm&#xff1a; 一、位置&#xff1a; 相比XGB&#xff0c;LGBM有更高效的計算效率和更低的內存占用&#xff0c;并且面對高維數據&#xff0c;LGBM算法擁有更好的過擬合特性&#xff0c;這使得在建模數據量日趨增加的今天&#xff0c;LGBM會更適合作為前期探索性建模的模…

車載軟件架構 --- 二級boot設計說明需求規范

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 周末洗了一個澡,換了一身衣服,出了門卻不知道去哪兒,不知道去找誰,漫無目的走著,大概這就是成年人最深的孤獨吧! 舊人不知我近況,新人不知我過…

Cpp實現window上cmd執行效果

Cpp實現window上cmd執行效果 文章目錄 Cpp實現window上cmd執行效果1.頭文件包含部分2.main 函數部分3. 獲取當前工作目錄部分4.主循環部分5.退出條件部分6.處理 cd 命令部分7.執行其他命令部分8.讀取命令輸出部分9.關閉管道并處理返回碼部分10.源碼 1.頭文件包含部分 #include…

STM32 HAL庫FreeRTOS 中斷管理

一、引言 在嵌入式系統開發中&#xff0c;STM32 微控制器憑借其高性能、低功耗和豐富的外設資源&#xff0c;被廣泛應用于各種領域。FreeRTOS 作為一款輕量級、開源且功能強大的實時操作系統&#xff0c;為多任務處理提供了良好的支持。中斷是嵌入式系統中實現實時響應外部事件…

在 UE5 編輯器中,由于游戲設置 -> EV100 設置,點擊播放前后的光照不同。如何保持點擊播放前后的光照一致?

?In Unreal Engine 5 (UE5), discrepancies in lighting between the editor and play modes are often due to auto exposure settings, particularly when using the EV100 system. To maintain consistent lighting across both modes, follow these steps:?YouTube1Epic …