Сохранение данных на стороне клиента с помощью PHP / Javascript - PullRequest
2 голосов
/ 22 августа 2010

Я хочу создать сайт, который будет похож на craiglist.org. Если вы зайдете на сайт и нажмете на любой город, он перенаправит вас на субдомен города. И после этого каждый раз, когда вы заходите на craiglist.org, он перенаправляет вас на субдомен города. Поэтому мне нужно сохранить название города / страны на компьютере моего клиента.

Сначала я подумал, что могу сделать это с помощью Cookie с настройкой времени истечения. Я пытался это сделать, но время истечения не работает, как когда я закрываю браузер, это означает, что когда сеанс заканчивается, он больше не получает cookie.

Но если это было в порядке с cookie, то и для пункта назначения может быть не так, как если бы я просматривал сайт из Mozilla и закрывал и открывал сайт с помощью IE, он должен перенаправить меня на посещаемый сайт, что невозможно с cookie я думаю?

Не могли бы вы дать мне предложение? Как я могу сделать это. Я собираюсь сделать заявку с Codeigniter / Php.

Спасибо Sumon

Ответы [ 3 ]

2 голосов
/ 22 августа 2010

cookie - правильный подход. вы не можете достичь чего-то кросс-браузерного ... хорошо, вы можете использовать флэш-куки или повторно определять IP-адрес и т.д., но это глупо ...

ну craiglist.org, кажется, перенаправляет меня в зависимости от того, откуда взялся мой IP-адрес. Для этого вам необходимо зайти на этот сайт: http://www.maxmind.com/app/geolitecity

Вообще говоря, вы всегда должны давать пользователю возможность переключаться вручную.

с точки зрения оптимизации юзабилити, я бы предложил следующий сценарий:

  1. пользователь нажимает на приветственную страницу
  2. Страница приветствия определяет город пользователя с помощью geoip 3.1 если город был успешно обнаружен, пользователь получает прямой ответ на дочерний сайт, cookie сохраняется 3.2, если город не был успешно обнаружен, на странице приветствия отображается список выбора. как только пользователь щелкает список выбора, устанавливается cookie, и пользователь получает указанный дочерний сайт
  3. на каждом дочернем сайте есть хорошо видимая кнопка сверху "переключить город" или что-то в этом роде. если пользователь щелкает по нему, он попадает на страницу приветствия, но с параметром «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>
        <?
     }
    }
    ?>
1 голос
/ 22 августа 2010

Cookie - лучший способ сделать это ;если cookie веб-браузера не перезагружается после закрытия браузера, у вас должно быть что-то не так при создании cookie.

Ознакомьтесь с документами PHP для setcookie(): http://us3.php.net/set_cookie, и убедитесь, что вы заранее указываете время истечения, например strtotime("+300 days").На сервере, чтобы прочитать cookie, просто используйте суперглобальный $ _ COOKIE .Ссылка: http://us3.php.net/manual/en/reserved.variables.cookies.php

Кроме того, не забудьте проверить настройки браузера для обработки файлов cookie ... возможно, он настроен на удаление файлов cookie после закрытия браузера.

Наконец, вы можететакже используйте IP-адрес пользователя, но имейте в виду, что пользователи могут использовать один и тот же IP-адрес, если они находятся в одной локальной сети, например, в университете или корпорации.Вы даже можете автоматически выбирать местоположение с помощью службы поиска местоположения по IP, например http://ipinfodb.com/


. Вы можете проверить файлы cookie своего веб-сайта в Firefox, перейдя по адресу

Tools -> Page Info -> Security -> View Cookies

0 голосов
/ 22 августа 2010

Кажется нелогичным пытаться сохранить состояние браузера в разных браузерах. Если пользователь переключает браузер, ему обычно не гарантируют одинаковые настройки браузера, если только у него нет учетной записи на этом сайте.

Если они являются зарегистрированными пользователями, вы должны сохранить в базе данных любое нужное вам состояние и получить его при входе в систему. Затем вы всегда можете кэшировать данные в файле cookie на стороне клиента, поэтому вам не нужно каждый раз получать их.

По моему мнению, хранение событий браузера в разных браузерах для анонимных пользователей не стоило бы усилий.

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