当前位置: 首页 > wzjs >正文

酷玛网站建设博星卓越 网站开发方案

酷玛网站建设,博星卓越 网站开发方案,灌云网站制作,宁波妇科专家排名如上图,我的百度网盘已登录设备列表,有一个手机,2个windows客户端。手机设备有型号、最后登录时间、IP等。windows客户端信息有最后登录时间、操作系统类型、IP地址等。这些具体是如何实现的?下面分别给出android APP中采集手机信…

如上图,我的百度网盘已登录设备列表,有一个手机,2个windows客户端。手机设备有型号、最后登录时间、IP等。windows客户端信息有最后登录时间、操作系统类型、IP地址等。这些具体是如何实现的?下面分别给出android APP中采集手机信息,VUE3中采集电脑信息的实现思路和关键代码。


一、思路
 

通常是通过 Session 管理+Token机制+数据库存储 组合实现的。以下是可能的实现方式:

1. Session 或 Token 机制

  • 服务器为每个客户端生成唯一的 sessiontoken(JWT、OAuth等)。
  • 这些 token 会存储在数据库或缓存系统中(如 Redis)。

2. 记录登录状态

  • 当用户成功登录后,服务器会在数据库中记录 当前设备信息(如 IP、User-Agent、设备 ID)。
  • 还可以给每个 session 生成一个唯一 ID,并记录 设备唯一标识(如浏览器指纹、手机唯一 ID)。

3. 检查并限制登录数量

  • 登录时检查:当用户登录时,服务器会查询数据库或缓存,看当前账号已登录的设备数量是否已达到上限(如 3 个)。
  • 超限处理
    • 方案1:阻止新登录:如果已达上限,则拒绝新的登录请求,并提示“已达到最大设备数量”。
    • 方案2:踢掉旧设备:可以让用户选择踢掉最早登录的设备(删除最早的 session/token)。
    • 方案3:手动管理:提供用户后台,让用户手动管理登录设备,选择登出某个设备。

4. 定期清理过期/无效的 Session

  • 服务器可以设置 session 过期时间(如 7 天无操作自动登出)。
  • 或者在用户 主动登出 时,删除对应的 session/token。

超出最大登录数量时,百度网盘的实现方案是方案1:拒绝新的登录请求,并提示“已达到最大设备数量”。


二、上代码
 

1. Android APP 采集设备信息(Java/Kotlin)

Android 端可以使用 Build 类、TelephonyManagerWifiManager 采集设备信息,例如 设备型号、系统版本、IP 地址、MAC 地址 等。

示例代码 (Kotlin)

import android.content.Context
import android.net.wifi.WifiManager
import android.os.Build
import android.telephony.TelephonyManager
import java.net.NetworkInterface
import java.net.SocketException
import java.util.*fun getDeviceInfo(context: Context): Map<String, String> {val deviceInfo = mutableMapOf<String, String>()// 设备型号deviceInfo["deviceModel"] = Build.MODEL// 设备品牌deviceInfo["deviceBrand"] = Build.BRAND// Android 版本deviceInfo["androidVersion"] = Build.VERSION.RELEASE// 设备唯一 IDdeviceInfo["deviceId"] = Build.SERIAL// 获取 IP 地址(WIFI 或移动网络)val wifiManager = context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManagerval wifiInfo = wifiManager.connectionInfoval ip = android.text.format.Formatter.formatIpAddress(wifiInfo.ipAddress)deviceInfo["ipAddress"] = ip// 获取 MAC 地址deviceInfo["macAddress"] = getMacAddress()return deviceInfo
}// 获取 MAC 地址
fun getMacAddress(): String {try {val interfaces = Collections.list(NetworkInterface.getNetworkInterfaces())for (networkInterface in interfaces) {if (!networkInterface.name.equals("wlan0", ignoreCase = true)) continueval macBytes = networkInterface.hardwareAddress ?: return ""return macBytes.joinToString(":") { "%02X".format(it) }}} catch (ex: SocketException) {ex.printStackTrace()}return "02:00:00:00:00:00" // 默认 MAC 地址
}

输出示例

2. Vue3 获取电脑信息

在 Vue3 Web 端,可以获取 IP、浏览器类型、操作系统等,但无法获取 MAC 地址(受浏览器安全限制)。需要配合后端来获取客户端 IP。

示例代码

<script setup>
import { onMounted, ref } from "vue";const deviceInfo = ref({userAgent: "",platform: "",ipAddress: "",
});// 获取本地设备信息
const getDeviceInfo = async () => {deviceInfo.value.userAgent = navigator.userAgent; // 浏览器信息deviceInfo.value.platform = navigator.platform; // 操作系统// 获取公网 IP(需要后端支持)try {const response = await fetch("https://api.ipify.org?format=json");const data = await response.json();deviceInfo.value.ipAddress = data.ip;} catch (error) {console.error("IP 获取失败", error);}
};onMounted(() => {getDeviceInfo();
});
</script><template><div><h3>设备信息</h3><p>操作系统: {{ deviceInfo.platform }}</p><p>浏览器信息: {{ deviceInfo.userAgent }}</p><p>IP 地址: {{ deviceInfo.ipAddress }}</p></div>
</template>

输出示例

3. 将 session 存入 Redis的示例代码

首先,在 Spring Boot 项目的 pom.xml 中引入 Redis 相关依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId>
</dependency>

application.yml 中配置 Redis 连接信息:

spring:redis:host: localhostport: 6379password: ""timeout: 5000session:store-type: redistimeout: 86400  # 1天(可根据需求调整)

在 Java 代码中,我们使用 RedisTemplate 来存储 session,每次用户登录时:

  • 检查是否超出设备数量(例如最多 3 个)
  • 如果超出,踢掉最早的设备
  • 存入 Redis 并设置过期时间
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.concurrent.TimeUnit;@Service
public class SessionService {private final RedisTemplate<String, Object> redisTemplate;private static final int MAX_SESSIONS = 3;  // 限制最大设备登录数public SessionService(RedisTemplate<String, Object> redisTemplate) {this.redisTemplate = redisTemplate;}/*** 记录新的登录 session* @param userId 用户 ID* @param sessionId 新的 session ID* @param deviceInfo 设备信息(IP、设备类型)*/public void addSession(String userId, String sessionId, String deviceInfo) {String key = "user_sessions:" + userId;// 获取当前已存储的 session 列表List<Object> sessions = redisTemplate.opsForList().range(key, 0, -1);if (sessions != null && sessions.size() >= MAX_SESSIONS) {// 超过最大限制,移除最旧的 session(列表最左侧的)redisTemplate.opsForList().leftPop(key);}// 添加新的 sessionredisTemplate.opsForList().rightPush(key, sessionId + ":" + deviceInfo);// 设置 session 过期时间(7 天)redisTemplate.expire(key, 7, TimeUnit.DAYS);}/*** 获取用户已登录的设备列表*/public List<Object> getSessions(String userId) {String key = "user_sessions:" + userId;return redisTemplate.opsForList().range(key, 0, -1);}/*** 删除某个 session(用于手动登出)*/public void removeSession(String userId, String sessionId) {String key = "user_sessions:" + userId;redisTemplate.opsForList().remove(key, 1, sessionId);}
}

测试 API

创建一个 RestController 让前端可以调用:

import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/session")
public class SessionController {private final SessionService sessionService;public SessionController(SessionService sessionService) {this.sessionService = sessionService;}// 添加新的登录 session@PostMapping("/add")public String addSession(@RequestParam String userId, @RequestParam String sessionId, @RequestParam String deviceInfo) {sessionService.addSession(userId, sessionId, deviceInfo);return "Session added successfully!";}// 获取用户的 session 列表@GetMapping("/list")public List<Object> getSessions(@RequestParam String userId) {return sessionService.getSessions(userId);}// 移除指定 session(登出)@PostMapping("/remove")public String removeSession(@RequestParam String userId, @RequestParam String sessionId) {sessionService.removeSession(userId, sessionId);return "Session removed!";}
}

测试示例

启动 Spring Boot 服务器后,可以用 Postmancurl 测试:

① 添加新 session
 

curl -X POST "http://localhost:8080/session/add?userId=123&sessionId=abcd123&deviceInfo=Windows_192.168.1.10"

返回

Session added successfully!

② 获取已登录设备

curl -X GET "http://localhost:8080/session/list?userId=123"

返回

③ 手动登出某个设备

curl -X POST "http://localhost:8080/session/remove?userId=123&sessionId=session1"

返回:Session removed!

总结

功能实现方式
存储 sessionRedis List 数据结构 (opsForList())
限制最多 3 个设备超过 3 个时 leftPop() 删除最旧 session
查询设备range(0, -1) 获取当前 session
登出设备remove() 删除指定 session
Session 过期expire(7, TimeUnit.DAYS) 设置 7 天过期

这样就可以限制用户最多只能在3台设备上登录,并支持手动踢出设备。


文章转载自:

http://Nrsxs88q.msmtf.cn
http://bdNCXf4p.msmtf.cn
http://yjehEPdR.msmtf.cn
http://X4zVJmNs.msmtf.cn
http://TdFraDDL.msmtf.cn
http://tr17fo5M.msmtf.cn
http://HsVwjtDT.msmtf.cn
http://oayD10yp.msmtf.cn
http://axVu3mRA.msmtf.cn
http://gMWhFb3R.msmtf.cn
http://aPxPafnC.msmtf.cn
http://tvIGppA8.msmtf.cn
http://hRaD43JB.msmtf.cn
http://SY7lQ4Kv.msmtf.cn
http://KKvcgT5z.msmtf.cn
http://g258nB9n.msmtf.cn
http://o2H2yFa9.msmtf.cn
http://29zxer3I.msmtf.cn
http://uXqXlDga.msmtf.cn
http://ISNj8io7.msmtf.cn
http://1MY9II4y.msmtf.cn
http://1CtMmqyM.msmtf.cn
http://a1n0aRJA.msmtf.cn
http://2WzsySAL.msmtf.cn
http://scIUuQ4j.msmtf.cn
http://8zuA97EI.msmtf.cn
http://6b1u7aym.msmtf.cn
http://Nmb3gbov.msmtf.cn
http://brSJWOpi.msmtf.cn
http://2UAYRYke.msmtf.cn
http://www.dtcms.com/wzjs/717370.html

相关文章:

  • 甘肃省建设厅执业资格注册中心网站辽宁省建设厅官方网站
  • 宁波市市建设法规颁发网站软考考试科目有哪些
  • 郑州flash网站建设网站建设如果登录失败
  • 化妆品网站建设网站域名可以做网站名吗
  • 网站开发语言字典免费淘宝关键词工具
  • 网站数据库太大搬家还原500错误在海南注册公司需要什么条件
  • 泰安高端网站建设山西城乡建设网站
  • html5制作网站模板wordpress有哪些工具栏
  • 利用代码如何做网站网站上传到万网主机
  • 九歌人工智能诗歌写作网站商标查询官网入口
  • 自适应网站建设哪家好淄博哪有培训做网站的
  • 徐州做企业网站如何自己开网店的详细步骤
  • 晋城市 制作网站珠海网站建设科速
  • 网站建设范文统计局门户网站建设背景
  • 开个网站做英语培训wordpress 社交账号 文章评论
  • 广州制作网站公司简介企业信用信息系统
  • 沈阳黑酷做网站建设优化公司怎么样网站做调查问卷给钱的兼职
  • 做网站备案是个人还是企业好南京广告传媒公司有哪些
  • 注册或者浏览社交类网站时不恰当深圳品牌策划设计
  • 福建亨利建设集团有限公司网站温州网站制作策划
  • 展示型网站怎么做系统下载 网站 源码
  • 福田网站建设龙岗网站建设罗湖网站建设罗湖网站建设ppt模板设计
  • aspcms 你的网站未安装 请先安装苏州网络seo
  • 农业建设信息网站怎么设计公司logo图片
  • wordpress网站重定向循环h5技术建设网站的知识
  • 仿牌网站服务器淘宝代运营公司哪家好
  • 自动生成海报的网站华龙建设部网站查不到
  • 茶叶网站制作模板作文网小学
  • 阿里云搭建多个网站discuz绿色带门户手机网站模板
  • 拓客网站建设高端网站建设公司成都