1

現在、URL likでそのIDを使用するだけで、データベース内の製品の情報を取得できhttp://www.example.com/?productID=5
ます。これらのIDはすべて自動インクリメントされるため、次のIDを推測できます。
このIDをどのように非表示にして、より良いものに置き換えますか?つまり、それはまだ一意の識別子でなければなりません。
少し複雑にするために、グローバル一意識別子を使用して、これをデータベースの別の列に追加できると考えていました。しかし、これはこれを行うための最良の方法ではないと感じています:)
あなたの考えを教えてください、そしてあなたがあなたのプロジェクトでこれをどのように解決したか/解決するかを教えてください。

私が基本的に望んでいるのは、次/前のIDを知ることを取り除くことです。

製品自体にセキュリティ上の制限はありません。ほとんどの場合、ユーザーはそれらを見ることができます。このテクニックですべての製品をクロールできないと思っていましたか?!?

amazon.comのように:アイテムのIDを何らかの方法で隠しているようですよね?

4

4 に答える 4

2

また、SEOに最適なスラッグを使用することもできます。したがって、製品1のスラッグはhttp://www.example.com/?productSlug=exampleitemnameasonewordである可能性があります 。スラッグが一意であることを確認する必要があります。もちろん、データベースエントリにスラッグフィールドが必要であり、それを入力/編集できるようになります。

于 2012-12-04T15:37:32.553 に答える
1

まず、mod_rewriteを見てください。

私はを利用CakePhpしています。これにより、.htaccessルールによって作成されたURLに簡単にアクセスできます。私の場合、私のタイトルは100%ユニークであるため、タイトルのスラッグバージョンを使用できます。

たとえば、私のタイトルはですがSZD-51 Junior、これはになりSZD-51_Juniorます。slugこれをデータベースに追加し、これを2番目の一意の識別子として使用します。ユーザーが訪問すると、次のwww.example.com/planes/SZD-51_Juniorようなことができます。

// pseudo mysql
SELECT *
FROM table
WHERE slug = url_param

//in cakephp
$this->Plane->findBySlug($this->params['slug']);

アプローチはたくさんありますが、URLをどのようにしたいと思いますか?どのフォーマットですか?

于 2012-12-04T15:39:28.187 に答える
1

md5()、sha1()などのようなハッシュアルゴリズムを使用できます。そうです、検索を高速化するには、そのハッシュをテーブルの別の列に格納することをお勧めします。

md5()を使用する場合は、固定またはランダムなソルト文字列をシードすることをお勧めします。私のお気に入りはmicrotime()でそれを行うことです。

db挿入の前にハッシュを生成します。

$salt = "my_secret_salt_string";
$entry['hash_code'] = md5($salt . microtime()); // every time a different result is generated which will ensure uniqueness
// insert into ...

または、生成されたIDをソルトとして使用する場合は、エントリを更新します。

// insert into ...
// get id
$entry['hash_code'] = md5($id . microtime());
// update ...
于 2012-12-04T15:41:29.813 に答える
-2

これに対する解決策は、代わりにpostを使用することです。これは、私が行った簡単なマッシュアップです。

<?php

//how to handle the request
if(isset($_POST['transfer']) && !empty($_POST['transfer']))
{
    $transfer = $_POST['transfer'];

    //what to do?
}

?>

//how to make a link with id 5
<a href="javascript:transfer('5');">link</a>

//this is for the functionality
<form id="transfer_form" action="http://www.example.com/" method="POST">
    <input type="hidden" id="transfer" name="productID" value="" />
</form>

//this should be placed within the <head>
<script>
function tranfer(link)
{
    document.getElementById('transfer').value = link;
    document.getElementById('transfer_form').submit();
}
</script>
于 2012-12-04T15:34:00.440 に答える