公共配置文件的可公开查看的用户 ID

本文关键字:用户 ID 配置文件 | 更新日期: 2023-09-27 18:34:01

我想为我网站上的每个用户创建一个公开的个人资料页面。与SO用户配置文件非常相似的东西。但我不想暴露我用作PK的Guid。我也不知道用户名在网站的生命周期中在 url 中使用它有多独特。

问题是SO本身如何在url https://stackoverflow.com/users/242506/nubm 中做到这一点?用户名可以删除,网址仍然有效,但我是否应该在我的 Guid 旁边生成一些公开可见的 UserId,我可以在指向配置文件页面的链接中使用并在 url 中显示它?

发现了类似的问题 我应该向公众公开用户 ID 吗?或 如何在 ASP.NET (3.5( 中创建"公共"用户配置文件页面,但它们并不是我想知道的。

公共配置文件的可公开查看的用户 ID

你可以做两件事。

首先,可以在数据库上创建一个额外的增量 ID(在 ASP.NET 表或新的映射表上(,并提供连接到 Guid 的较小数字。为什么数字较小?因为 Guid 是 128 位,并且太大而无法像在 url 上那样使用。

然后,可以在 url 上使用与 Guid 连接的较小数字。这里唯一的漏洞利用问题是任何人都可以找到所有用户列表。所以有这个公众,所以如果你也让他们公开,这不是问题。因此,使用其URL中的数字来查找用户,用户名是为了更好的SEO。号码保持不变,但名称可以更改,因此仅使用号码来定位用户。

第二种解决方案是将 128 位 Guid 编号压缩并编码为 73 个基本字符串。我选择了 73 基本字符,因为 73 是 url 上允许的取消转义字符。

以下是我发现的一些进行此转换的示例:

http://www.singular.co.nz/blog/archive/2007/12/20/shortguid-a-shorter-and-url-friendly-guid-in-c-sharp.aspx

http://jopinblog.wordpress.com/2009/02/04/a-shorter-friendlier-guiduuid-in-net/

http://buildmaestro.wordpress.com/2011/04/27/installscript-to-transform-guid-into-compressed-guid/

一个简单的转换为base64(来自Dave Transoms(

public static string Encode(Guid guid)
{
  string encoded = Convert.ToBase64String(guid.ToByteArray());
  encoded = encoded
    .Replace("/", "_")
    .Replace("+", "-");
  return encoded.Substring(0, 22);
}
public static Guid Decode(string value)
{
  value = value
    .Replace("_", "/")
    .Replace("-", "+");
  byte[] buffer = Convert.FromBase64String(value + "==");
  return new Guid(buffer);
}

在SO的情况下,使用PK。URL 的用户名部分是可选的,将被忽略。