[IE] JS, PHP - получение чужой куки
<script type="text/javascript" src="http://home.domain/IsUserAuthorizedScript"></script>
На сервере (PHP не знаю, напишу на ASP.NET):
public ActionResult IsUserAuthorizedScript
{
if (User.IsAuthenticated)
return Content("var authorized=true;");
return Content("var authorized=false;");
}
Тебе ведь не нужна сама кука, а нужен факт залогинен/не залогинен?
Тебе ведь не нужна сама кука, а нужен факт залогинен/не залогинен?залогинен/не залогинен на этом компьютере, а не в системе вообще.
Но кука тому скрипту в IE не отдается, а факт залогинивания отслеживается как раз по ней. Следовательно,
$user = new user;
echo $user->data[IDUser];
echo $user->is_user;
отдаст пустую строку и false. В общем-то, путей, как получить данные, полно. Но куку скрипт на homedomain в IE не отдает. Точнее, различными изжопствами и инструментами для разработчиков мы увидели, что она ЕСТЬ, но скрипту не отдает.
Можно было бы отдавать session_id гетом, но где ж его взять на стороннем домене.
В общем, такие способы мы уже пробовали - в FF, Chrome и Opera всё ок, в IE/Safari - вот так. Интересно, как это поборото у VK/FB
Что значит "в системе вообще"? Мне кажется, кому-то из нас следует почитать про организацию сессии / авторизации в HTTP через cookies.
Но кука тому скрипту в IE не отдаетсяЭту фразу не понял.
Ты хочешь сказать, что когда IE обращается к http://homedomain/someaddress, он не прикладывает нужную cookie, хотя она в браузере сохранена?
Или что-то другое?
Если обращение к homedomain идет с targetdomain, то он ее не отдает.
Вот смотри, что я нагуглил: http://www.softwareprojects.com/resources/programming/t-how-...
Последний абзац:
One Thing to Watch Out ForВозможно, это как раз твой случай? Впрочем, я пока не очень понял, что там происходит.
There is one small problem with the above output that curl generated. It really is not hard to solve but can take a little bit to find if you don't know to look for it. The problem is the cookie is generated before the Privacy Policy. Which means that Internet Explorer will reject the cookie because at the time the cookie is being created the browser has not yet received the privacy policy. The only thing that needs to be done to fix this issue is move the P3P header code to be output before the cookie generation code.
Но послать P3P-заголовок _до_ setCookie при запросе что яваскрипта, что результатов в iframe возможным не представляется.
Можно было бы сделать через сокеты, но опять же - куки тогда надо установить самому, а со стороннего домена я ее не узнаю.
фуф... осталось полтора дня
http://homedomain/foo.php
http://targetdomain/iframe.php
FF: c50c174df9de3516bbd5f6e33d295d13
IE: пусто
<?
header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');
header('Content-type: text/javascript');
echo('document.getElementById("IDUser").innerHTML = "'.$_COOKIE[PHPSESSID].'";');
?>
http://targetdomain/iframe.php
<?
header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');
?>
<!DOCTYPE html>
<html>
<head>
<title>trololo</title>
</head>
<body>
<div id="IDUser"></div>
<script src="http://homedomain/foo.php"></script>
</body>
</html>
FF: c50c174df9de3516bbd5f6e33d295d13
IE: пусто
<!DOCTYPE html>
<html>
<head>
<title>trololo</title>
</head>
<body>
<div id="IDUser"></div>
<script src="http://homedomain/foo1.php"></script>
<script src="http://homedomain/foo.php"></script>
</body>
</html>
Моя задумка - что при первом запросе IE не отправит куку, но получит P3P. А при втором - отправит куку.
foo1.php назвал, чтобы исключить кеширование. foo1 - тот же скрипт, что и foo.
неа:(
тогда сдаюсь
кстати, пробовал вместо <script> ставить iframe? может, этот p3p их по-разному интерпретирует?..
попробовал iframe еще раз - то же самое
p3p выставил на максимальный прием всего, используя http://www.webentrust.com/p3ptools/compact/builder.html
попробуй помониторить все HTTP запросы и найти, как вконтакту удается пролезать в эти рамки.
Использовать для передачи надо кросс-доменный js. Делается это примерно так.
Пусть у тебя страничка example.com/1.html, там заводишь функцию poluchit_sekritik(sekretik)
Потом вставляешь js из другого домена, которая делает такой вызов: poluchit_sekretik('erwhjhgwerkjwgfeurgfkwehjgerhjwgferhjw')
а сама функция уже сходит куда надо и по такому секретику уже получит что угодно.
Если не понятно объяснил, пиши приватик. Или читай как кнопки ВК и БФ работают, это всё одно и то же.
не очень понятно, нужно ли разрешить такое поведение только с targetdomain. если ограничения нет, то я бы делал через jsonp
Как уже писалось, нужна система, аналогичная recommend у VK/FB/etc.
JSONP я начинал читать, но в подробностях мы пока не осиливали и не факт, что получится (серверная платформа старая, возможно, кучу уже написанного кода придется писать под старый PHP)
осильте, php не роляет.
а как jsonp решит проблему, что IE не прикладывает куку к <script src=""> запросу к другому домену?
А что, передать данные не в куках, а в строке GET запроса нельзя?
данные о том, что пользователь залогинен на чужом сайте? проблематично.
прикладывает
Месье не читал тред? Напрасно, рекомендую прочесть.
месье знает, что контекстная реклама работает в ie
месье знает, что контекстная реклама работает в ieконтекстная и конкретно-человеко-ориентированная - это не одно и тоже..
для первого, куки в скрипте не нужны, для второго тоже, если используется iframe
Так я согласен, но у Федечки проблема как раз в том, что он не может продублировать функциональность контекстной рекламы из-за того, что ие не прикладывает куки.
Оставить комментарий
uncle17
Есть:- homedomain, на котором проводится авторизация
- targetdomain, на котором нужно узнать, залогинен ли человек на homedomain
Грубо говоря, нужен механизм наподобие кнопки recommend у VK, FB и прочая.
на targetdomain создается iframe, в который грузится скрипт с homedomain, который выдает в iframe свою куку (тот же PHPSESSID, к примеру).
FF, Chrome вполне нормально ее отдают, и я могу видеть на targetdomain, кто я на homedomain.
IE же в силу политик безопасности по дефолту ее не отдает. Safari, насколько я прочитал, тоже, но еще не пробовал.
Для IE существует способ с обманом third-party cookies при помощи явного указания
Для Safari существует способ на основе подгрузки результата скрипта в iframe не сразу, а POST-запросом из родителя (при POST-запросе, вроде как, куку кроссдоменно отдать можно).
Но с IE что-то не выходит... Точнее, как мы заметили, выходит, если на странице homedomain перед авторизацией выскакивает вконтактовская авторизация (сама по себе, виджет ВК тоже стоит на странице). Пытались понять, что они там такое инициализируют, что _наша_ кука начинает отдаваться кроссдоменно в IE. Так и не можем найти.
Какие есть мысли или как еще можно реализовать?