Перейти к содержанию
Einshtein

Сессия, HTTP_REFERER и Мускул

Рекомендуемые сообщения

В кратце:

Делаю модуль (для паблика и собственного саморазвития), который будет определять УРЛ с которого клиент зашел на сайт и выводить его в заказе в админке, гдето возле Ip и версии браузера. 
Зачем?Чтобы проще было отслеживать конверсию тем, кому лень пользоваться Вебмастерсом, да и вообще - почему бы нет

 

Пока функция у меня работает на уровне записи информации в журнал, но я хочу привести её к подобающему виду, чтобы данные записывались в БД и хранились в таблице order в случае если клиент подвтердит заказ.
И я столкнулся пока с 2мя проблемами

1) нужно записывать данные о первом заходе клиента в какойто буфер обмена, временную таблицу так сказать, чтобы информация в этом буфере хранилась до тех пор пока клиент не сделает заказ. Потом эта инфа будет записываться в таблицу order вместе с остальными данными о заказе. 
С ip и user_agent все обстоит гораздо проще - информация собирается в тот момент когда человек подтверждает заказ, и эти данные всегда неизменны (статичны так сказать). А вот Урл перед оформлением заказа - всегда будет менятся (так как человек перед заказом бродит по сайту), поэтому и нужно сохранять инфу о первом посещении человека. Немогу только придумать как это сделать и куда записываются подобные данные...не в session.php же пихать их...

Собсно сам вопрос - где хранить данные о первом посещении клиента с возможностью вытащить их при оформлении заказа? 

можно попробовать записывать данные о рефере в сессию както так, но при переходе на страницы - вместе с куки будет перезаписываться и рефер, да и мне не понятно как потом вытащить эти данные

if( isset( $_SERVER['HTTP_REFERER']) && (!$_COOKIE['last_ref'])) {
   SetCookie( 'last_ref', $_SERVER['HTTP_REFERER']);
} 

 

PS Второй вопрос, озвучу если удастся решить первый, не хочу путаницу устраивать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Через сессию, конечно.

$this->session->data['url_refferer'] = $url_refferer; //где в $url_refferer будет урл, с которого человек зашел

Как-то так.

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ок, я вижу это так:

<?php  
class ControllerCommonUrl_refferer extends Controller {
	protected function index() {
		$this->language->load('common/url_refferer');
		
		if($url_refferer=getenv("HTTP_REFERER")){
	$this->session->data['url_refferer'] = $url_refferer; //где в $url_refferer будет урл, с которого человек зашел
		}
		if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/common/url_refferer.tpl')) {
			$this->template = $this->config->get('config_template') . '/template/common/url_refferer.tpl';
		} else {
			$this->template = 'default/template/common/url_refferer.tpl';
		}
		
		$this->render();
	}
}

?> 

 

присваиваем реферу переменную url_refferer и делаем запись в сессию

Оно?

Хотел засунуть переменную в шаблон, потом сообразил что она там нафик не нужна

Вот еще вопрос хороший - в какой файл лучше запихнуть этот цикл. Пока новые файлы не создаю, пытаюсь через футер вывести, проблема в том что модель у футера отсутствует, немогу сделать запись в бд. Каким образом в ОС можно вывести массив в произвольную таблицу в бд?

PS а все...сообразил как запись сделать в произвольном файле, както так:
$this->model_catalog_information->add

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вместо

if( isset( $_SERVER['HTTP_REFERER']) && (!$_COOKIE['last_ref'])) {
   SetCookie( 'last_ref', $_SERVER['HTTP_REFERER']);
} 
 

Попробовала в catalog/controll/common/header.php вставить:

    if( isset($_SERVER['HTTP_REFERER']) && (!isset($this->session->data['url_refferer']))) { //во втором условии проверяем, что data['url_refferer'] не существует, т.е. юзер зашел на сайт впервые
      $this->session->data['url_refferer'] = $_SERVER['HTTP_REFERER'];
    }
Вроде корректный reffer в сессии остается.
  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, засунул в футер, теперь хочу глянуть что происходит.

Сессии хранятся на сервере на сколько я знаю, как можно посмотреть на исходные данных ?
В частности меня интересует как Вы проверили корректность реффера?

 

Больно извиняюсь за глупые вопросы, я в процессе самообучения, для меня эта тема новая  :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
    $temp = $this->session->data['url_refferer'];
    ob_start();
    var_dump($temp);
    $String = ob_get_contents();
    ob_end_clean();
    file_put_contents(DIR_APPLICATION . 'controller/common/var_debug.txt', $String);

В данном случае в /catalog/controller/common появится файл var_debug.txt, в котором будет записана переменная $temp

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
    $temp = $this->session->data['url_refferer'];
    ob_start();
    var_dump($temp);
    $String = ob_get_contents();
    ob_end_clean();
    file_put_contents(DIR_APPLICATION . 'controller/common/var_debug.txt', $String);

В данном случае в /catalog/controller/common появится файл var_debug.txt, в котором будет записана переменная $temp

Действительно работает, спасибо большое! :)

Посижу подумаю как вытянуть теперь запись из сессии при оформлении заказа. Тему еще буду поднимать. 

Благодарю за помощь :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

В контроллере confirm добавляем 

$data['url_refferer'] = $this->session->data['url_refferer'];

 

В моделе order добавляем

'url_refferer'              => $order_query->row['url_refferer'],

 

и

. "', url_refferer = '" . $this->db->escape($data['url_refferer'])

 

Теперь поместить в оболочку и вынести функцию по сбору реффера в отдельный файл

 

PS Выявил ошибку, почемуто записывает в бд урл страницы на которую перешли, вместо того с которой перешли..

Pss даже не так, сохраняет урл страницы с которой зашли на страницу оформления заказа...Оказывается сессия обновляется когда идет переход к оформлению заказа, изза этого соответственно перезаписывается урл

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Создаем модель:

<?php
class ModelToolUrlrefferer extends Model {
	public function getUrlRefferer() {
    if (isset($this->session->data['url_refferer'])) {
      return $this->session->data['url_refferer'];
    } else {
      return false;
    }
	}
	public function setUrlRefferer() {
    if( isset($_SERVER['HTTP_REFERER']) && (!isset($this->session->data['url_refferer']))) { //во втором условии проверяем, что data['url_refferer'] не существует, т.е. юзер зашел на сайт впервые
      $this->session->data['url_refferer'] = $_SERVER['HTTP_REFERER'];
      return true;
    } else {
    return false;
    }
	}
}
?>

В котроллере футера пишем refferer:

    $this->load->model('tool/urlrefferer');
    $this->model_tool_urlrefferer->setUrlRefferer();

В подтверждении заказа (controller/checkout/confirm.php) считываем refferer:

    $this->load->model('tool/urlrefferer');
    $this->data['refferer'] = $this->model_tool_urlrefferer->getUrlRefferer();

 

Все работает...

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А где запись в бд данных из переменной с урлом из сессии? У меня этот вариант почемуто неработает

В первом варианте все работало, только сессия обнулялась при ajax

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А где запись в бд данных из переменной с урлом из сессии? У меня этот вариант почемуто неработает

В первом варианте все работало, только сессия обнулялась при ajax

В моем варианте запись в БД не реализована, в принципе, ее можно прикрутить в момент подтверждения заказа.

Сессия обнулялась может из-за того что все это дело реализовывалось в контроллере?

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если дописать в модель order те строки которые я приводил выше и добавить в контроллер confirm после Ваших строк еще 

$data['url_refferer'] = $this->session->data['url_refferer']; 

 

То запись в таблицу идет. Но проблема осталась та же - обнуление сессии при переходе в корзину...
К слову использую чистый Осstore 1,5,4,1

 

PS Все! Попробовал с другого браузера - все работает!!111адынадын

Меня насторожило то, что последние 3 заказа которые я делал - одинаковый урл присваивался, причем той категории в которой я небыл.

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

Естественно как я и говорил нужно добавить в модель и контроллер пару строчек и все будет работать.


Завтра постараюсь довести до ума и вывести в карточке заказа, с этим я уже справлюсь )

Уважаемая 12strun, примного благодарен за помощь, без Вас не справился бы :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.