У меня такой вопрос. Допустим, пользователь имеет id=1. Этот пользователь авторизовался на сайте и просматривает, допустим, фотоальбом другого пользователя, у которого id=2. На этой странице для него скрыта ссылка "Редактировать альбом". Но если этот пользователь с id=1 заменит свой id на id=2, то ссылка "Редактировать альбом" появляется и, соответственно, он может редактировать альбом другого пользователя. Вконтакте, в адресной строке, помимо указанного id пользователя, есть и набор цифр, который, как я понимаю, и защищает от подмены id, поскольку если заменяешь id, то выдается сообщение Not Found. Подскажите, пожалуйста, как можно реализовать подобную защиту от подмены id. $g = $_COOKIE['autorization']; //хранится куки авторизованного пользователя в виде его email $f = db_query("SELECT * FROM users WHERE email = '$g'"); //функция db_query прописана в отдельном файле, на этом не надо заострять внимание $pl = mysql_fetch_array($f); $pls = $pl['id']; //берем id авторизованного пользователя $id = $_GET['id']; // берем id того пользователя, чей это альбом Вот дальше то я и не знаю, как сделать, чтобы ссылка редактировать альбом появилась только для владельца альбома, т.е. id., а сам альбом пользователя c данным id открылся. если писать: if(isset($_COOKIE['autorization'])) { if($pls==$id) { показать ссылку } } Но это ерунда, заменяешь id, и чужой альбом доступен авторизованному пользователю.
какой id заменяешь? $pls не берется с формы, его фиг заменишь. $id? при открывании альбома бери $id, используй его только как параметр запроса "чей альбом вытаскивать из базы". Оттуда же из базы тащишь альбом и id создателя альбома. С ним свой $pls и сравнивай.
заменяю id в адресной строке. А можно поточнее, что означает параметр запроса "чей альбом вытаскивать из базы"? Т.е. создать какое-то дополнительное поле в базе данных альбомов, я правильно понимаю?
Так. У тебя есть пользователь, который хочет посмотреть чей-то альбом. Каким образом твой скрипт узнает, чей именно альбом он хочет посмотреть? Запрос в студию.
karakh запрос: $ria = db_query("SELECT * FROM albums WHERE glav_id='$id'"); //glav_id - это id владельца альбома
Бинго! Зачит у тебя в базе хранится id хозяина альбома. Значит, ты можешь вытащить его (поле glav_id) из результатов своего запроса. $row['glav_id'] или что-то в этом роде. Логично?
karakh Логично, но если в адресной строке подменить на id авторизованного пользователя, то этот же запрос вернет естественно, альбом авторизованного пользователя. Но поскольку id совпадает с pls, то и авторизованному пользователю открывается доступ к редактированию альбома, принадлежащего id.