Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.11.2014, 10:07
Интересующийся
Отправить личное сообщение для hated8 Посмотреть профиль Найти все сообщения от hated8
 
Регистрация: 24.04.2010
Сообщений: 27

iframe и чужой домен
Прошу не закидывать камнями - знаю что тема уже избитая но всё же не могу не задать свой вопрос, может будет предложено более подходящее решение.
В общем стоит задача определять был ли пользователь у нас ранее или нет, чтобы дать/недать ему пробный бесплатный период доступа. Только это должен быть точный признак ибо лучше дать повторно, чем не дать по ошибке тому кто должен его получить. Соответственно методы определения по ip,useragent, плагинам, разрешению экрана и т.п. отпадают из за своей погрешности. Остаются только куки. И естественно куки со своего домена это слишком очевидно - нужно оставлять их на посторонних доменах, что бы халявщику было сложнее их определить. понятно, что продвинутых это не остановит, но хотя бы халявщики-чайники поотпадают.
Итак куки с другого домена у нас сейчас работают но по средствам редиректов. Это слишком видно - хочется чтобы они создавались и проверялись в фоне. Ну с созданием проблем нет iframe display:none - и кука готова. Но вот как быть с чтением?
К содержимому ифрейма прогрузившего чужой домен как известно не подкопаться =(.
Вот собственно и вопрос как прочитать куки с чужого(хоть и принадлежащего нам) домена iframe-ом или чем то ещё, но так чтобы это делалось в фоне?
Была идея например менять цвет боди в ифрейме в зависимости от куки на чужом домене, а потом например как то прочитать канву этого ифрейма, но как это сделать не знаю, да и сомневаюсь возможно ли...
Ответить с цитированием
  #2 (permalink)  
Старый 10.11.2014, 11:55
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

в фрейм чужого документа залазить нельзя, ибо безопасность:
<html>
	<head> 
		<title>Тестирование</title>
	</head>
	<body>
	<iframe src="http://javascript.ru/" width="200" height="200"  scrolling="yes"></iframe>
	<script>
var iframe = document.querySelector('iframe');
console.log(iframe.contentWindow.document);
	</script>
	</body>

</html>


либо в фрейме делать ссылку какую то, типа:
<iframe src="http://javascript.ru/?key_user_id=trololo" width="200" height="200"  scrolling="yes"></iframe>

Последний раз редактировалось skrudjmakdak, 10.11.2014 в 11:58.
Ответить с цитированием
  #3 (permalink)  
Старый 10.11.2014, 17:02
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

hated8,
Если на чужом домене фрейм ставите своим скриптом Вы, то можно передать кук в hash адреса фрейма, предварительно закодирова в encodeURIComponent

Если же наоборот, чужой док во фрейме, и у Вас нет доступа к той страницы с установкой скриптов - то дело швах,
если есть - то ставите свой фрейм, во фрейм свою ссылку с хешем, либо postMessage, либо просто XMLHTTPRequest 2 / XDomainRequest

http://javascript.ru/ajax/cross-origin-2

Последний раз редактировалось Deff, 10.11.2014 в 17:09.
Ответить с цитированием
  #4 (permalink)  
Старый 10.11.2014, 21:04
Интересующийся
Отправить личное сообщение для hated8 Посмотреть профиль Найти все сообщения от hated8
 
Регистрация: 24.04.2010
Сообщений: 27

Сообщение от Deff Посмотреть сообщение
hated8,
Если на чужом домене фрейм ставите своим скриптом Вы, то можно передать кук в hash адреса фрейма, предварительно закодирова в encodeURIComponent

Если же наоборот, чужой док во фрейме, и у Вас нет доступа к той страницы с установкой скриптов - то дело швах,
если есть - то ставите свой фрейм, во фрейм свою ссылку с хешем, либо postMessage, либо просто XMLHTTPRequest 2 / XDomainRequest

http://javascript.ru/ajax/cross-origin-2
postMessage - ТЕМА!!! ))) СПАСИБО! Я на него натыкался как-то но подумал что он только от parent отправляет, а оказывается и обратно можно))
Ответить с цитированием
  #5 (permalink)  
Старый 16.11.2014, 13:40
Интересующийся
Отправить личное сообщение для hated8 Посмотреть профиль Найти все сообщения от hated8
 
Регистрация: 24.04.2010
Сообщений: 27

РАБОТА НАД ОШИБКАМИ

В общем прикрутил всё это дело так:
По адресу http://site2/olduser.php страничку где работает такой пхп:
<?php
if ($_COOKIE['caught'])
	echo "<script>top.postMessage('".$_COOKIE['caught']."', '*');</script>";
	else
	echo "<script>top.postMessage('nocook', '*');</script>";
?>

На основном сайте(site1) пользователь по ходу работы сам создаёт куку "caught" в которую записывается его логин по ходу работы. Остаётся только проверить при регистрации нового пользователя на site1 есть ли у него уже кука "caught" на site2, чтобы понять новый это пользюк или перерегистрирующийся старый.
Проверяю так:
<iframe src='http://site2/olduser.php' style='display:none;'></iframe><script>
function listener(event){ itsOldUser(event.data);  } 

if (window.addEventListener)
{
   window.addEventListener("message", listener,false);
} else {
   window.attachEvent("onmessage", listener);
}
</script>

Если кука на site2 существует то выполняется функция itsOldUser('логин пользюка') если нет то itsOldUser('nocook'). nocook - отправляю чтобы запрос отправлялся один раз, т.е. если раз получил nocook то больше не вывожу этот фрейм и скрипт.

itsOldUser - по мимо прочих манипуляций по блокировки пользователя скидывает в логи информацию о том, что пользюк такой-то пытался зарегистрироваться под новым таким-то...
Попытка регистрации ("логин старый") под новым ("логин новый")

И всё замечательно работает сколько бы я не тестировал но! Примерно 10% приходят в таком виде:
Попытка регистрации ("логин старый") под новым ([object Object])
Попытка регистрации ("логин старый") под новым ({\"id\":\"2\",\"key\":\"611A400F-2627-4710-B92D-E15E616С3DF1_foss\",\"value\":null})
Попытка регистрации ("логин старый") под новым ({\"id\":\"1\",\"key\":\"fouhid\",\"value\":\"611A400F-2624-4710-B92S-E25E616B3DF1\"})

Что это такое? У нас ни на site1 не на site2 - нет таких параметров. Почему прилетает такая билиберда ели там должен быть логин или nocook? Как понять что это за пользователи(есть ли у них кука на site2?) если возвращается такая фигня?

Сколько не пытался повторить поведение этих пользователей, так и не смог получить эти результаты. Сколько не тестировал - всё нормально работает и возвращается логин или nocook... Как такое происходит и что они делают?

В общем прошу помощи...
Ответить с цитированием
  #6 (permalink)  
Старый 17.11.2014, 07:19
Интересующийся
Отправить личное сообщение для hated8 Посмотреть профиль Найти все сообщения от hated8
 
Регистрация: 24.04.2010
Сообщений: 27

Определил что такие косяки идут с ЯндексБраузера и он почему-то исполняет listener(event) дважды, сначала как надо, а второй раз уже ы event.data в которой бодяга о чём написал выше...
Почему так?
Ответить с цитированием
  #7 (permalink)  
Старый 17.11.2014, 18:06
Интересующийся
Отправить личное сообщение для hated8 Посмотреть профиль Найти все сообщения от hated8
 
Регистрация: 24.04.2010
Сообщений: 27

Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка контента на страницу: div vs iframe hrundel Общие вопросы Javascript 8 23.08.2016 07:48
получение ссылки на iframe из содержимого в этом iframe mister_maxim Events/DOM/Window 5 15.02.2013 22:48
Изменить параметр тега iframe AlexM jQuery 2 26.01.2012 12:05
iframe и как получить доступ к его содержимому syegorius jQuery 13 14.04.2011 22:05
Вложенные IFrame и History goldserg Элементы интерфейса 1 28.03.2011 15:57