Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Einshtein

Recommended Posts

В кратце:

Делаю модуль (для паблика и собственного саморазвития), который будет определять УРЛ с которого клиент зашел на сайт и выводить его в заказе в админке, гдето возле 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 Второй вопрос, озвучу если удастся решить первый, не хочу путаницу устраивать.

Надіслати
Поділитися на інших сайтах


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

<?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 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.