2009-06-17 2 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 개를 확인해야합니다. 하나는 개별 사진, 다른 하나는 올바른 사진입니다. 그 사진이 들어있는 앨범 둘 중 하나가 유효성을 확인하면 사진을 표시하십시오 ('해체'대신).

희망이 도움이됩니다.

+0

예 ... 글쎄, $ _SERVER [ 'REQUEST_URI'] 또는 그 종류의 일종의 추가 검사를 사용하는 대신 사진 페이지에서 앨범 URL을 다시 작성해야하지만, 실제로는 문제가되지 않습니다. 나는 그렇게 나쁘지 않다고 생각한다. 고마워요 – mpen

1

위의 사람과 마찬가지로 두 개의 키를 사용하고 싶을 것입니다. mysite.com/hashhere와 같은 하나의 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을 가리 키도록하려면 어떻게해야합니까? 사용자를 올바르게 리디렉션하지만 권한 배열에 잘못된 변수를 저장합니다.내가 뭘해야 할 것 같아요 내 short_urls 테이블에 또 다른 열을 추가하여 사용 권한 배열에 정확히 넣어야하는지 지정합니다.


실제로이 솔루션은 어쨌든 더 좋습니다. 그 방법은 모든 짧은 URL도 권한을 설정해야합니다. 새 코드 :

if(isset($url['perm_key'])) $_SESSION['permissions'][$url['perm_key']] = true; 
관련 문제