1

画像をホストするWebサイトが共有され、直接リンクされています。これは悪い考えだとどこかで読んだことがあります。Facebookから消えるまで既存のリンクをしばらく維持しながら、単純な間接アプローチを適用するにはどうすればよいですか?

4

1 に答える 1

2

以下の古い答え。

リンクを直接送信できないリンクを作成する例:

$expire = 60 * 5; // 5 minutes;
$time = $_SERVER['REQUEST_TIME'] + $expire;
$image_id = $image_id;
$secretpassword = "secretpassword";

function generate_link($image_id, $time, $secretpassword) {
    $hash = md5($secretpassword . $time . $image_id);
    return "image.php?" . http_build_query(array(
        'image_id' => $image_id,
        'time' => $time,
        'hash' => $hash,
    ));
}

function is_link_valid($image_id, $time, $hash, $secretpassword) {
    if ($hash !== md5($secretpassword . $time . $image_id)) {
        return false; // hash is invalid
    }
    if ($time < $_SERVER['REQUEST_TIME']) {
        return false; // link has expired
    }
}

次のように使用します:

generate_link($image_id, $time, $secretpassword);
is_link_valid($_GET['image_id'], $_GET['time'], $hash, $secretpassword);

生成するリンクには、画像IDとリンクの有効期限が切れる時刻の2ビットの情報を入れます(したがって、リンクを直接送信することはできません)。さらに、ハッシュを追加して、誰も変数を「混乱」させないようにします。ハッシュの生成方法を知っているのはあなただけです(に依存します$secretpassword)。

これらのリンクは、5分後、または設定した内容で期限切れに$expireなります。

1つの問題は、これらのリンクがあまりきれいに見えないことです。私はそれらをより美しく見せるための方法を知っていますが、それはこの質問の範囲を超えています。


古い答え

他のドメイン(Facebookなど)にある画像を共有していることを意味していると思います。

あなたが説明する問題は、他のドメインの画像(および帯域幅)を使用して他のドメインから「リーチング」していることです。直接リンクに関するFacebookのポリシーはわかりませんが、サイトが少ない場合は実際の負担になります。間接参照を追加しても、この問題は解決されません。

それを解決する唯一の方法は、無料の画像サーバーまたは自分で制御する画像サーバーのいずれかに画像をアップロードすることです。ユーザーにこれを行わせることも、ユーザーのために行うこともできます。イメージサーバーを制御しない場合、自動化は困難ですが、イメージサーバーを使用すると、非常にコストがかかる可能性があります(帯域幅は高価です)。ユーザーにそれを行わせると、ユーザーに負担がかかり、追加の手順を実行する必要があるため、サイトの魅力が低下する可能性があります。

これらはあなたが持っているオプションだと思います。

于 2011-06-02T18:21:34.853 に答える