2

Webサイトのすべてのユーザーの公開プロファイルページを作成したいと思います。SOユーザープロファイルに非常によく似たもの。ただし、PKとして使用しているGuidを公開したくありません。また、URLで使用するために、Webサイトの存続期間中にユーザー名がどれほど一意になるかはわかりません。

問題は、SO自体がURLhttps ://stackoverflow.com/users/242506/nubmでこれをどのように行っているかです。ユーザー名は削除してもURLは機能しますが、Guidの横に公開されているUserIdを生成して、プロファイルページへのリンクで使用し、URLで表示できるようにする必要がありますか?

同様の質問を見つけました。ユーザーIDを公開する必要がありますか?またはASP.NET(3.5)で「パブリック」ユーザープロファイルページを作成するにはどうすればよいですか。ただし、それらは私が知りたいものではありません。

4

2 に答える 2

2

あなたは2つのことをすることができます。

まず、ASP.NETテーブルまたは新しいマップテーブルのいずれかでデータベースに追加のインクリメンタルIDを作成し、Guidに接続する番号を小さくすることができます。なぜ少ない数なのか?Guidは128ビットであり、URLでそのまま使用するには大きすぎるためです。

次に、Guidに接続されているこの小さい番号をURLで使用できます。ここでの唯一のエクスプロイトの問題は、誰でもユーザーのすべてのリストを見つけることができるということです。だから、この公開を持っているので、あなたがそれらも公開していれば問題ではありません。したがって、ユーザーを見つけるためにURLの番号を使用し、ユーザー名はSEOを向上させるためのものです。番号は同じままですが、名前は変更される可能性があるため、ユーザーの検索には番号のみが使用されます。

2番目の解決策は、128ビットのGUID番号を圧縮して73の基本文字列にエンコードすることです。73はURLで許可されているエスケープ解除文字であるため、73の基本文字を選択しました。

この変換を行うために私が見つけたいくつかの例を次に示します。

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);
}
于 2012-05-14T12:52:32.950 に答える
1

SOの場合、PKが使用されます。URLのユーザー名部分はオプションであり、無視されます。

于 2012-05-14T12:53:01.007 に答える