cookie - правильный подход.
вы не можете достичь чего-то кросс-браузерного ... хорошо, вы можете использовать флэш-куки или повторно определять IP-адрес и т.д., но это глупо ...
ну craiglist.org, кажется, перенаправляет меня в зависимости от того, откуда взялся мой IP-адрес.
Для этого вам необходимо зайти на этот сайт: http://www.maxmind.com/app/geolitecity
Вообще говоря, вы всегда должны давать пользователю возможность переключаться вручную.
с точки зрения оптимизации юзабилити, я бы предложил следующий сценарий:
- пользователь нажимает на приветственную страницу
- Страница приветствия определяет город пользователя с помощью geoip
3.1 если город был успешно обнаружен, пользователь получает прямой ответ на дочерний сайт, cookie сохраняется
3.2, если город не был успешно обнаружен, на странице приветствия отображается список выбора. как только пользователь щелкает список выбора, устанавливается cookie, и пользователь получает указанный дочерний сайт
- на каждом дочернем сайте есть хорошо видимая кнопка сверху "переключить город" или что-то в этом роде.
если пользователь щелкает по нему, он попадает на страницу приветствия, но с параметром «userelection = true» ro что-то, так что автоматическое обнаружение и перенаправление ip не срабатывает.
пользователь выбирает нужный дочерний сайт, получает cookie и перенаправляется.
5.
если пользователь снова заходит на страницу приветствия и обнаруживается, что cookie перенаправлен на дочерний сайт, cookie может быть переопределен, это не проблема ...
самое простое и bset решение - установить cookie с помощью php и затем перенаправить заголовок!
таким образом вы устраняете JavaScript, который можно отключить или что-то в этом роде.
просто используйте эту команду php:
setcookie("city", $value, time()+(86400*365));
или что-то подобное. вот справочная страница:
http://php.net/manual/en/function.setcookie.php
вы можете проверить значения cookie, используя
if($_COOKIE['city'] != '')
редактирование:
как и путаница, у меня есть рабочий пример для вас здесь, просто вставьте его в файл php и сохраните его на своем веб-сервере :) проверка subsite не понадобится, поскольку вы сказали, что перенаправляете на внешний сайты (субдомены) всегда.
имейте в виду, что вы не можете получить доступ к куки-файлу с субдомена, если вы установите его на другом субдомене! Возможно, это была ваша проблема, поэтому проверка и перенаправление в файл начальной загрузки.
ну вот, пожалуйста. любые вопросы? комментарий!
<?
/* this is if we are at a subsite. you wont need that as it will be external subdomains anway just for the purpose of a working example here.*/
if($_GET['subsite']!="") {
/* the change link has the paramenter userselection which overrides any autoamtic detection by cookie or ip or whatever, this is important if the user wants to change or the automatic change fails or is wrong*/
?>
you are now at the subsite of <?=$_GET['subsite'];?><br/>
<a href="?userselection=true">click here to change</a>
<?
}
else {
/* only try to automatically redirect if we have either cookie or user specified data, but dont if the flag userselectino is true. because the user wants to change.
you could ip-detect the city at this point.
*/
if(($_GET['go']!=''||$_COOKIE['city']!='')&&$_GET['userselection']!='true') {
/* if we had ip detection the priority of it would probably go here */
$target=$_COOKIE['city'];
/* the get varaible overrides the cookie value as its user supplied and more important*/
if($_GET['go']!='') {
$target=$_GET['go'];
}
/* set the cookie, don't care if it already has been set*/
setcookie('city',$target,time()+(86400*365));
/* redirect the user */
header('Location: ?subsite='.$target);
}
else {
/* well we either have neither cookie nor user specified city or the user wanted to change teh city, lets display the selection dialog!*/
?>
hello! select your city:<br/>
<a href="?go=vienna">vienna</a>
<a href="?go=newyork">new york</a>
<?
}
}
?>