Как хранить изображения профиля пользователя в частном порядке, чтобы они были доступны только владельцу профиля? - PullRequest
0 голосов
/ 28 февраля 2012

Я занимаюсь разработкой сайта с использованием фреймворка Yii. На моем сайте есть профили пользователей (уже реализовано). У меня будет загрузчик файлов, чтобы пользователи могли загружать изображения профиля. Некоторые профили могут быть доступны для общественности, другие будут приватными. Частные профили должны быть недоступны для публичных пользователей, а изображения в этом профиле могут быть недоступны никому, кроме владельца профиля.

Я прочитал, что хранить изображения в базе данных MySQL - плохая идея, так как это снижает производительность и может быть запрещено на моих веб-хостингах. Я думал о хранении изображений в моей защищенной директории, но если я это сделаю, я вообще не смогу связываться с изображениями. Как тогда я смогу отображать изображения в действительных профилях (общедоступных профилях или профилях, принадлежащих пользователю?)

Будем очень благодарны за любые подсказки или идеи (связанные с Yii, php или другими). Дайте мне знать, если мой вопрос неясен. Спасибо.

* Кстати, у меня никогда не было официального курса по веб-разработке, и, как и многие другие, я выучил все, что знаю, в свое время, поэтому вполне возможно, что я упускаю очень простое / очевидное решение.

Ответы [ 3 ]

2 голосов
/ 28 февраля 2012

После того, как пользователь загрузил свою фотографию, переименуйте изображение случайным образом и сохраните случайное имя файла в пользовательской таблице.

После входа в систему вы, конечно, установите сеанс (по крайней мере, идентификатор пользователя).

Создайте image_profile.php и получите user_id из сеанса в этом файле.После этого выполните такой запрос:

SELECT `profile_image_filename`
FROM user WHERE user.id = {$SESSION['user_id']}
LIMIT 1;

и затем отправьте {$profile_image_filename}.jpg, чтобы результатом image_profile.php было изображение профиля вошедшего в систему пользователя.(Как вывести изображение динамически? Вывести изображение в PHP )

2 голосов
/ 28 февраля 2012

подают изображения через php-файл, который может проверить, имеют ли они текущий сеанс разрешения

1 голос
/ 29 февраля 2012

После того, как пользователь загрузит изображение, получите случайное имя изображения, например.mt_rand(30,999).imageExtension.
Сохраните это значение как имя изображения пользователя в таблице image.Таблица изображений содержит собственные столбцы id, user_id и name.

В модели Yii Image создайте метод protected function afterSave(), который сохранит ваше изображение в файловой системе.Ваше реальное имя изображения в файловой системе будет состоять из идентификатора изображения в базе данных и имени изображения из базы данных.
Не забудьте добавить следующую строку в эту функцию:

return parent::afterSave();

Пример:
У вас есть изображение jpg me.jpg
mt_rand (30,999) дает нам 421
Таким образом, вы сохраняете свое изображение jpg в базе данных.
Строка имеет значения:
id=7, user_id=3, name=421.jpg
Теперь вы сохраняете изображение под именем 7_421.jpg.
. При этом ваше изображение никогда не получит одно и то же имя дважды, поскольку id, которое мы используем в первой части имени изображения, является уникальным.Более того, никто не будет знать имя изображения, потому что ему / ей понадобится и id, и случайное число.

Чтобы отобразить изображение только для владельца, вы сравниваете зарегистрированный идентификатор пользователя совпадает с user_id делая:

if(Yii::app()->user->id === $image->user_id) {
 // display photo
}

Вам не нужно заботиться о сессии.Yii делает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...