不幸的是,我没有找到适合我的答案,所以我希望有人能给我一些建议。
我可以接受用户ip,但是它可以是动态的,因此这不是100%的保证,而且在一个ip上可以有多个用户。
我也可以使用anonymousIdentification。
<anonymousIdentification
enabled="true"
cookieless="UseCookies"
cookieName=".ASPXANONYMOUS"
cookieTimeout="30"
cookiePath="/"
cookieRequireSSL="false"
cookieSlidingExpiration = "true"
cookieProtection="Validation"
/>
但是它基于容易被关闭或清除的鸟蛤。
据我所知有人使用evercoockie,但我觉得这太粗糙了,也许我错了。
因此,我想知道是否可以通过计算机和移动设备更可靠地识别用户。
答案 0 :(得分:0)
您可以为每个访客生成一个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();
}