質問

私は、ASP.NETでWebサイトを作成し、最後にユーザーIDとURLを介してアクセスすることができ、ユーザプロファイルを持つことができるようにしたいのです。一意の識別子はない、本当にURLフレンドリー(私が間違っているなら、私を修正)明らかにそれが長いと悪い選択であります。

私は、ASPページ上で一意idnetifierを生産している場合、

私が思っていたが、それはまだちょうどGUIDのようにユニークな(あるいはユニークで全て)であるかどうCRC(または同様のもの)を使用して、それをハッシュ化されます。

GUID 6f1a7841-190b-4c7a-9f23-98709b6f8848はCRC E6DC2D44に等しい。

おかげ

役に立ちましたか?

解決

GUIDのCRCは無い、ユニークではありません。それはちょうど4バイトにすべてをかけることができるように、それ以外のいくつかの素晴らしい圧縮アルゴリズムになります。

ユーザーがGUIDキーを使用してデータベースに格納されている場合は、

また、あなたが困っこの特定のCRCまで一致するユーザーを見つけることを持っていると思います。

あなたは、ユーザを一意に識別するために、昔ながらの整数を使用したほうが良いと思います。あなたが推測できないURLを持っているしたい場合は、ランダムに生成されています第二チケット(またはトークン)パラメータとそれを組み合わせることができます。それはあなたがユーザーを識別するための整数IDを使用しているため、一意である必要はありません。あなたは多かれ少なかれ、パスワードと考えることができます。

他のヒント

任意の計算されたハッシュは、元のデータよりも少ない情報(ビット)を含み、として一意であることはできません。衝突は常にあります。

は、ユーザーがユーザー名を持っている場合は、その理由を使わないのでしょうか?それはユニークでなければなりません(私が望んでいるだろう!)と、おそらく短いものとURL優しいでしょう。また、ユーザーがあまりにも、覚えやすいこと、およびASP.NETメンバーシップ制度(ユーザ名は、メンバーシッププロバイダーの「主キー」であるため)とに収まるでしょう。私は(おそらく)のみ認証されたユーザーとして任意のセキュリティ上の問題が、とにかく、それをアクセスすることができます表示されないのですか?

あなたはそれからの情報を失っているので、

いいえ、それは、のように一意ではありません。あなたは32文字の16進文字列を取り、その後、8文字の16進文字列に変換する場合は、定義により、あなたはデータの75%を失っている。

あなたはどうすることができ、データを表現するために多くの文字を使用しています。 GUIDは16文字(ベース16)ONY使用するので、あなたがより少ない文字で同じ量の情報を符号化することができ、より高い塩基(例えばベース64)を使用することができます。

私は、HTTP URLで、通常のGUIDに問題が表示されません。あなたにGUIDの短絡形をしたい場合は、以下の使用します。

var gid = Guid.NewGuid().ToString("N");

これは、任意のハイフンや特殊文字なしGUIDが得られます。

A GUIDは、あなたがうまくいけば、これまで、衝突に実行されないことを意味し、グローバルに一意です。これらは通常ランダムで時間ベースの計算のいくつかの並べ替えにinterjected基づいています。あなたはCRCなどのハッシュを使用して、何かを短くしたい場合まで再生し、その後、それは自動ではありません一意性はなく、限り、あなたはあなたの一意性を自分で管理するよう(ハッシュが現在別のユーザーにそうであれば割り当てられていないかどうかをチェックしますあなたはユニークなものを得る)、あなたはほとんど何でも使用することができます。

この方法では、URL短縮サービスの仕事がたくさんある。

あなたがIDとしてUUID / GUIDのCRCを使用する場合は、

あなたはまた、最初の場所で短いIDを使用することができます。

IDとしてUUID / GUIDのアイデアは、あなたが切断システム上のIDを作成することができますし、重複したIDを持つ問題はない必要があることをIMOである。

とにかく、誰が、とにかく手でプロフィールページのURLを入力しようとしている?

また、私はUUID / GUIDのURLの使い勝手に問題を見ていない - のhttpによって許可されていない何も文字はありません。

ユーザーはどのようにデータベース(または、あなたのデータを格納するために使用し、他の場所)で識別されますか?

彼らはこのGUIDを使用して識別されている場合は、

私は言うだろう、これは(バイナリツリーを用いた場合であっても)本当に複雑な特殊なIDを探しますので、あなたは、このために本当に良い理由があります。これらの値を格納するのに必要なより多くのスペースもあります。

これらは一意の整数値によって識別されている場合は、なぜユーザープロファイルを呼び出すために、これを使用していない?

あなたはそれがまだユニークであること、任意の情報を失うことなくして、20個の印刷可能なASCII文字にGUIDを短縮することができます。

ジェフ・アトウッドことで、このブログの記事を見てみましょう:
装備私たちのASCIIアーマー

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top