2009-06-30 1 views
2

は、私はこのようなURL変数を生成できるようにしたい:私はそれを引き出すことができるようにdbレコードに一致するユニークなURL変数を生成するにはどうすればよいですか?

http://example.com/195yq 
http://example.com/195yp 
http://example.com/195yg 
http://example.com/195yf 

変数は、MySQLのレコードセットに一致します。そのレコードセットの作成時に、このキーを作成したいと考えています。

どうすればいいですか?これを行う最善の方法は何ですか?私が利用できる既存のクラスはありますか?

おかげで、すべての

+0

あなたは「そのレコードセットの作成時に、このキーを作成したいと思います。このURLを実際に作成する場所はどこですか? DBまたは上位層? – alphadogg

答えて

0

基本的には、ある種のハッシュ関数が必要です。

これは、SHA-1関数、(altCogitoとしての)MD5関数、またはレコードにある他のデータを使用してそれをエンコードすることができます。

あなたは何レコードあると思いますか?ハッシュ関数はあなたをうまく覆うほど大きくなければならないが、大きすぎると、必要以上に大きなデータベースを作成する必要があるので、ソリューションを選択する際には注意が必要です。私はSHA-1を使い、必要に応じて64ビットまたは32ビットに切り詰めました。

また、RESTを見てください。 URLが非常に不思議である必要はないと考えてください...

+0

私はレコードが少なくとも何百万人もいることを望んでいます。楽観的、はい。私はコンテンツを隠しているのではなく、長すぎることを望まないので、私はむしろ私のプライマリの自動増分IDではなく、このユニークな変数をユーザーに表示したいと思います。 – Abs

+1

私は時にはURLが長いことであることに同意します。しかし、人が読めるURLには、あなたがどのようなリソースを手に入れようとしているかを伝えるものがあります。ほとんどの人はURLを入力するのではなく、リンクをクリックするかGoogleを使用します。私は誰かが私にそれのためにTinyURLを与えて欲しいと思った完全なURLを実際にタイプした最後の時間を覚えていません... – alphadogg

+0

うーん、良い点、私は実際にもそれを想像することはできません。 – Abs

0

これは、いくつかの方法で非常に簡単に行うことができます。

  • などMD5として、ハッシュを使用してください。あなたがMySQLのレコードで、すでにこれを行うものがあるかどうかを求めている場合は、データ

の特定のIDや作品が、私はあなたが「ことはよく分からない

  • Base-64エンコード(長くなります) Grailsのようなフレームワークであっても、データは実際には概念的にはあなたのウェブサイトのURLから遠く離れています。ほとんどの企業は、フロントエンドとデータアクセスの機能を1つの要素にまとめようとはしていません。

  • +0

    Base-64自体がロングです。 4キャラクターは8になります。 – Abs

    +0

    本当、本当です:) – cgp

    0

    どのような文脈でこれを使用しますか?ポスト変数を渡すだけではどうですか?それははるかに安全できれいです。あなたはまだid = 195yqのようなURLの数字を達成しますが、php.iniファイルを設定することによってそれらを隠す方法があります。

    私はこれがあなたに役立つことを望みます。

    この点に注意してください。アドレスバーに変数を渡すと、誰かが変数を変更したり、アクセスしたくない情報にアクセスしたりするのは簡単です。

    +0

    これらのURLは、誰でも私のサイトの特定のページを見つけるために使用できます。多くのページとコンテンツがユーザー生成されます。できるだけ短くする必要があります。 – Abs

    +0

    私は理解しています。申し訳ありませんが、私はあなたを助けることはできません。運が良ければ、これは私にとっても非常に役立ちますので、私は見ていきます。 +1良い質問! –

    0

    あなたが与えた例では、数字の主キーをベース64エンコーディングしているようです。これで私はこれをやって、これまでやったことがありますが、ベース64のデコードは簡単ではないので、IDを渡すよりも良いとは思いません。

    +0

    base64_encodeなどを使用していますか?これは、多くの文字を含む変数になります。私はそれがどれほどユニークなのかは分かりません。 – Abs

    +0

    はい、base64_encode()関数を使用しました。私のデータベースは非常にゆっくりと成長し、エンコードされたIDはそれほど長くはありません。 – Scott

    関連する問題