c# - 如何在 ASP.NET MVC 5 中验证未授权用户
问题描述
不幸的是,我没有找到接近我的答案,所以我希望有人能给我一个建议。
我可以获取用户 ip,但它可以是动态的,所以这不是 100% 的保证,而且在一个 ip 上可以有多个用户。
我也可以使用anonymousIdentification。
<anonymousIdentification
enabled="true"
cookieless="UseCookies"
cookieName=".ASPXANONYMOUS"
cookieTimeout="30"
cookiePath="/"
cookieRequireSSL="false"
cookieSlidingExpiration = "true"
cookieProtection="Validation"
/>
但它基于可以轻松关闭或清除的 cookie。
我知道有人使用evercoockie,但我觉得它太粗糙了,也许我错了。
所以我想知道是否有可能更可靠地识别计算机和移动设备的用户。
解决方案
您可以为每个客人生成一个 GUID 并将其保存在 cookie 中。所以每次用户来的时候它都会检查cookie。然后,您可以将 GUID 用作其他实体的标识符,而不是用户 ID。我已将此系统用于允许访客和用户使用服务的页面。它必须是 GUID,而不是 int,因此无法手动操作 cookie。
public Guid InitGuestCookie()
{
if (Request.Cookies.AllKeys.Contains(Utils.Constants.GuestId))
{
var id = Request.Cookies[Utils.Constants.GuestId];
if (id != null)
{
var guid = new Guid(id.Value);
// Make sure this guid exists as a registered guest
var guest = _guestService.GetById(guid);
if (guest != null)
{
return guest.Id;
}
}
}
var newGuest = CreateGuest();
var cookie = new HttpCookie(Utils.Constants.GuestId, newGuest.Id.ToString());
Response.Cookies.Set(cookie);
return newGuest.Id;
}
public Guid GuestId { get; set; }
public Guest CreateGuest()
{
var guid = Guid.NewGuid();
var newGuest = new Guest()
{
CreateDate = DateTime.Now,
LastUsageDate = DateTime.Now,
Id = guid,
};
_guestService.AddOrUpdate(newGuest);
return newGuest;
}
在控制器的 Init 方法中,我调用:
protected override void Initialize(RequestContext requestContext)
{
base.Initialize(requestContext);
GuestId = InitGuestCookie();
}
推荐阅读
- r - 尝试在使用多个条件而不创建基线子样本的情况下找到平均值但不断收到此错误
- unit-testing - 如何评估更改对单行代码或变量的影响?
- javascript - JS在windows.open HTML页面中查找文本
- ruby - Ruby 小重构
- azure - 如何使用 azure 功能开始停止 azure app 服务计划
- sql - SQL Max() 对应的无空值
- biztalk - 脚本/自动化 BizTalk MSI 的创建,包括对挑选/选择项目的支持?
- ios - 记录区共享是如何完成的?
- postgresql - 如何向 AWS PostgreSQL 实例添加新排序规则
- react-native - 反应原生为什么我不能滚动我的模态