ASP.NET程序单客户端(浏览器)登录的实现方案

简介:

需求描述:当用户的账户在另一个浏览器中登录的时候,需要把当前浏览器的登录强制下线。这种需求在业务系统,或付费视频服务网站中比较常见。

这种需求我称之为“单客户端(浏览器)”登录,与单点登录(SSO)有本质的区别,关于SSO的实现方案可以参考我的另外一篇文章:谁都能看懂的单点登录(SSO)实现方式(附源码)

关于这个功能的实现,我分为三个环节:

  1. 用户登录。
  2. 处理用户请求。
  3. 心跳请求,Keep Alive。

 

用户登录

我们采用Forms Authentication来实现用户的登录,网上有很多的参考资料,我也写过一篇相关的文章:ASP.NET Forms Authentication详解

不过在开始之前,我们需要先定义一张表来存储已登录的用户,表LoginUser的结构如下:

image

  • UserId:当前登录用户的ID
  • LoginTime:登录时间
  • ClientIP:客户端的IP
  • UserAgent:用户浏览器的UserAgent,通常我们可以认为ClientIP+UserAgent代表一个客户端。
  • LastRequestTime:最后请求时间,在保持心跳的时候用到

这样几个字段基本上能满足我们的需要了,接下来是用户登录的流程图:

image

 

处理用户请求

当用户请求网站资源的时候,Forms Authentication 会根据客户端存储的Ticket信息进行认证用户身份,用户身份认证的流程如下:

image

 

有了上面的两个流程,已经基本实现了单客户端登录的需求。但是这样有一个弊端,就是只有当用户对网站发出请求之后,客户端才会知道自己有没有被强制退出。为了解决这个问题,我们引入心跳请求。

心跳请求

心跳请求是通过AJAX定时的向服务器发送请求,保证当前session始终有效。

我们这里利用心跳请求,在服务器返回数据中添加是否被强制退出的一个参数,使客户端能够及时的知道自己是否被强制退出。当客户端接到强制退出的信息时,可以通过JavaScript实现提醒、跳转等功能。

心跳请求与普通web请求一样,唯一不同的是当客户端接收到服务器返回信息后,需要判断是需要继续保持心跳,还是结束心跳,并提示用户已被强制退出。

 




本文转自齐师傅博客园博客,原文链接:http://www.cnblogs.com/youring2/p/4890192.html,如需转载请自行联系原作者

相关文章
|
5月前
|
XML 开发框架 .NET
LabVIEW中加载.NET 2.0,3.0和3.5程序集
LabVIEW中加载.NET 2.0,3.0和3.5程序集
109 4
|
29天前
|
Ubuntu 持续交付 API
如何使用 dotnet pack 打包 .NET 跨平台程序集?
`dotnet pack` 是 .NET Core 的 NuGet 包打包工具,用于将代码打包成 NuGet 包。通过命令 `dotnet pack` 可生成 `.nupkg` 文件。使用 `--include-symbols` 和 `--include-source` 选项可分别创建包含调试符号和源文件的包。默认情况下,`dotnet pack` 会先构建项目,可通过 `--no-build` 跳过构建。此外,还可以使用 `--output` 指定输出目录、`-c` 设置配置等。示例展示了创建类库项目并打包的过程。更多详情及命令选项,请参考官方文档。
86 11
|
28天前
|
存储 运维
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
|
28天前
|
自然语言处理 C# 图形学
使用dnSpyEx对.NET Core程序集进行反编译、编辑和调试
使用dnSpyEx对.NET Core程序集进行反编译、编辑和调试
|
2月前
|
开发框架 JSON .NET
ASP.NET Core 标识(Identity)框架系列(三):在 ASP.NET Core Web API 项目中使用标识(Identity)框架进行身份验证
ASP.NET Core 标识(Identity)框架系列(三):在 ASP.NET Core Web API 项目中使用标识(Identity)框架进行身份验证
|
3月前
|
Linux C# iOS开发
如何用 WinDbg 调试Linux上的 .NET程序
【7月更文挑战第13天】 1. `dotnet-dump`: Collects process dumps with `dotnet-dump collect -p <process_id>`. 2. `lldb`: Debugs Mono runtime apps on macOS/Linux. 3. **Visual Studio Code**: Remotely debugs .NET via the C# extension. 4. **JetBrains Rider**: Supports remote debugging of .NET on Linux.
|
2月前
|
开发框架 .NET API
分享一个 ASP.NET Web Api 上传和读取 Excel的方案
分享一个 ASP.NET Web Api 上传和读取 Excel的方案
|
2月前
|
开发框架 .NET 数据库连接
ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?
ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?
|
2月前
|
开发框架 NoSQL .NET
使用 Asp.net core webapi 集成配置系统,提高程序的灵活和可维护性
使用 Asp.net core webapi 集成配置系统,提高程序的灵活和可维护性
|
2月前
|
Web App开发 数据采集 开发框架
在.NET程序中整合微软的Playwright,使用 Playwright 的最佳实践和技巧
在.NET程序中整合微软的Playwright,使用 Playwright 的最佳实践和技巧
下一篇
无影云桌面