2009-06-17 4 views
2

私はギャラリーのウェブサイトを作っています。写真とアルバムはデフォルトでは公開されないようにする必要がありますが、所有者は必要に応じて公開URLを共有できます。私はまたこれのために短いURLを使いたいと思う。写真とアルバムを閲覧するための一時的な許可

私はこれを行うための最善の方法を見つけようとしています。最初は短いURLコード(Zneg8rjKのようなもの)と完全なURL(/album/5/)を持つMySQLテーブルを持つことができたと思っていました。ユーザーがこのリンク(mysite.com/Zneg8rjK)にアクセスすると、セッション変数には/album/5のハッシュだけを加えたものに加え、完全なURLにリダイレクトされます。そのページでは、現在のページを再ハッシュして、セッションに含まれているかどうかを確認できます。問題はないですが、そのアルバムの写真をクリックするとどうなりますか?それは崩壊する。

私が考えた次の解決策は、各アルバムと各写真に秘密鍵を保存してから、/album/5/secretkeyのような公開アドレスを持つべきだということでした。短いURLは代わりにこれを指すことができます。しかし、どのようにすれば、アルバム内のすべての写真を閲覧する権限をユーザーに与えることができますか?代わりに、秘密のアルバムURLを使ってアルバムにアクセスした場合にのみ、各写真をリンクして写真URLの秘密のバージョンを指すようにする必要がありますか?私の関心事は、アドレスバーから秘密鍵/ URLをできるだけ離しておき、ユーザが誤って共有しないようにしたいということです。しかし、よりよい解決策。

思考?


待機しても、URLをハッシュする必要がありますか?クライアントがセッション変数を変更する方法はありませんか?

+0

ギャラリーの構造は何ですか?どのように設定されているか、ユーザーが画像などとやりとりするときに何が起こるかを知らなければ、これはむしろ不可能な質問です。 –

+0

あなたはどういう意味ですか?以下の答えは、私にはうってつけです。それぞれの写真はアルバムに属しています...もっと何をする必要がありますか?まだ石には何も置かれていない。ユーザーが画像を表示しようとすると、画像を表示する権限があるかどうかが確認され、その画像が表示されるか、画像が表示されます。 – mpen

答えて

2

私はアクセス許可を確認する方法に少し依存すると思います - 私はアルバム全体のキーと個々の写真のキーを持つことをお勧めします。

あなたの投稿の最初の部分のリダイレクト物は実際にはそれほど悪くはありませんが、セッションで提供されたキーを2つの有効なオプション(個々の写真の場合は1つ、その写真を含むアルバムのどちらかが妥当である場合は、写真を表示します(「中断」ではなく)。

希望すると便利です。

+0

ええと...まあ、$ _SERVER ['REQUEST_URI']や何か別のチェックをするのではなく、写真のページからアルバムのURLを再構築する必要がありますが、それは本当に問題ではないと思います。私はそれほど悪くないと思う。ありがとう – mpen

1

上記のような2つのキーを使用することをお勧めします。 mysite.com/hashhereのような1つのURLを経由してアクセスを制限するのではなく、短いURLにハッシュを含める必要があります。したがって、リンク先に関係なく正しいハッシュがあれば、それを見ることができます。

さらに安全にするには、ギャラリーのオーナーにハッシュキーを更新するオプションも与えます。ユーザーと共有して公開URLや何かを投稿した場合は、再度ロックすることができます。

+0

ええ、それは既に計画された機能です:) 私はmysite.com/hashとmysite.com/album/id/hashを許可することを提案していますか?前者だけを使用するというアイデアは、私がとにかく必要としているようにリダイレクトしてURLから隠すために、セッションキーにハッシュを埋め込むことができるということでした。私はアルバムから同じページにリダイレクトすることもできますが、ハッシュもありません...しかし、私は追加の利点について完全には分かっていませんか? – mpen

+0

それは実際に私のせいだった、私はあなたがすでにハッシュを説明していることを見ている。私はハッシュがちょうどあなたが見ることができるアルバムを指示する "許可"のようにもっと考えていました。 ハッシュにその情報が含まれていれば、余分な手順が不要です。 – Wade

0

さて、ここで私がやっているものです:

$result = mysql_safe_query('SELECT * FROM short_urls WHERE short=%s', $_GET['p']); 
if(mysql_num_rows($result)> 0) { 
    $url = mysql_fetch_assoc($result); 
    $_SESSION['permissions'][$url['long']] = true; 
    redirect($url['long']); 
} 

これは、セッション変数に許可を保存し、適切なページにユーザーをリダイレクトします。そして、写真のページに私はこれを実行します。

if(array_key_exists('/photo/'.$photo_id, $_SESSION['permissions']) 
    || array_key_exists('/album/'.$photo['album_id'], $_SESSION['permissions'])) { 
    $can_see = true; 
} 

をしかし、私はまだ私がこれについてどのように感じているかわかりません。私の短いURLが/photo/5/some_other_paramを指すようにしたい場合はどうすればいいですか?ユーザーを正しくリダイレ​​クトしますが、間違った変数がpermissions配列に格納されます。私は何をすべきかは、short_urlsテーブルに別の列を追加して、アクセス許可配列に正確に何を入れるべきかを指定することでしょうか?


実際、私はこのソリューションがとにかく良いと思っています。そうすれば、すべての短いURLでアクセス権を設定する必要はありません。新しいコード:

if(isset($url['perm_key'])) $_SESSION['permissions'][$url['perm_key']] = true; 
関連する問題