может быть несколько решений, все они имеют положительные и отрицательные стороны:
- Вместо файла stati c html с жестко закодированными ссылками, вы можете создавать страницы на лету с php, таким образом, вы будете генерировать случайное число для каждой зоны и выводить html с соответствующими ссылками / изображениями
1.1. Вы можете использовать iframe для загрузки изображения и формы ссылки php server
Если вам нужно использовать stati c html и javascript, вы можете выполнить ajax вызов php с помощью javascript, который снова получит изображение и ссылку и будет использовать их для сгенерировать html код (document.write или внутренний HTML)
Вы можете попробовать использовать куки или механизм сессии, в этом случае в php коде у вас будет ветка if number for zone is not generated yet - generate and store in cookie/session; return link or image for number from cookies/session
Чтобы изменить код для # 3, вам необходимо заменить
$random_index = array_rand($zone);
на что-то вроде (запись без фактического php, поэтому синтаксические ошибки возможно):
$cook = 'zone' . $_GET['zone'];
$random_index = isset($_COOKIE[$cook]) ? $_COOKIE[$cook] : array_rand($zone);
setcookie($cook, $random_index);
примечание - вы должны поставить правильную проверку для любых переменных из GET или COOK IE
В случае почтовых клиентов - большинство из них ограничивают выполнение кода javascript и не хранят куки (и с точки зрения пользователя, очень хорошо, что они это делают), в любом случае вы можете попробовать что-то например:
- при отправке электронной почты генерировать уникальный идентификатор для каждого отправленного электронного письма (для этого вы можете использовать UUID)
- включить этот идентификатор в ссылки в вашем шаблоне, например
<a href="http://..../?...&id=UUID"><img src="http://.../?..&id=UUID"></a>
- в изображении и обработчике кликов - вам нужно получить идентификатор из URL и проверить в базе данных - присвоили ли вы ему значение, а если нет - сгенерировать и сохранить в db
- , если значение в db присутствует - теперь вы можете обслуживать соответствующее изображение или перенаправлять на соответствующий URL
- , но в этой схеме - пользователям всегда будет представлено одно и то же изображение (хотя разные пользователи будут видеть разные), чтобы исправить это, вы можете ввести некоторый срок действия, ie поставить метку времени в дБ и сделать недействительным (регенерировать) значение
примечание - некоторые почтовые клиенты могут принудительно кэшировать изображения, игнорируя заголовки http, таким образом, такая схема не удастся
другие примечания:
- не забудьте о заголовках http без кэша для обслуживания изображения
- не используйте постоянные перенаправления, только временные для вашего случая использования
- некоторые почтовые клиенты не будут загружать изображения, которые не встроены в сообщение, для таких вы можете играть с
<noscript>
и встроенными изображениями некоторых случайно выбранных объявление