Re[3]: Как установит cookies с одного домена на другой
От: DrZubr Беларусь  
Дата: 18.05.06 07:27
Оценка:
Здравствуйте, kpumuk, Вы писали:

K>И где я не прав?


В своем ответе.

Еще раз повторяю: из соображений безопасности нельзя читать/писать куки из другого домена (вопрос о поддоменах одного домена и свойстве domain оставляю на самостоятельное изучение).
Но, как и в любом правиле здесь есть исключение. Cross-domain cookies можно сделать если оба домена твои. Под "твои" я подразумеваю что ты сам можешь на них разместить нужные тебе скрипты. Организовать это можно следующим образом. Пишем скрипт, который читает имя куки из реквеста и выдает значение в респонс, еще скрипт, который ставит куку. Теперь на другом домене мы спокойно можем расположить html где при помощи элементов script можем дергать скрипты с другого домена, которые будут читать/писать куки. Html будет лежать в одном домене, а куки дергать мы будем для другого домена.

Вот простейший пример:

setcookie.php:
<?php
    setcookie($_REQUEST["name"], $_REQUEST["value"], time() + 36000);
?>

getcookie.php
<?php
    $cookiename = $_REQUEST["name"];
    echo "alert('" . $cookiename . " = " . $_COOKIE[$cookiename] . "');";
?>

listcookies.php:
<?php
    foreach ($_COOKIE as $name => $value) {
        echo "alert('" . $name . " = " . $value . "');";
    }
?>

testcookies.html
<html>
<head>
<script type="text/javascript">
function listCookies() {
    exec(document.getElementById('scriptsLocation').value + 'listcookies.php?rnd=' + 
        Math.random());
}
function setCookie() {
    exec(document.getElementById('scriptsLocation').value + 'setcookie.php?name=' + 
        document.getElementById('cookieName').value + '&value=' + 
        document.getElementById('cookieValue').value + '&rnd=' + Math.random());
}
function getCookie() {
    exec(document.getElementById('scriptsLocation').value + 'getcookie.php?name=' + 
        document.getElementById('cookieName').value + '&rnd=' + Math.random());
}
function exec(sUrl) {
    var head = document.getElementsByTagName('head').item(0);
    var script = document.createElement('script');
    script.src = sUrl;
    script.type = 'text/javascript';
    script.defer = true;
    void(head.appendChild(script));
}
</script>
</head>
<body>
scripts location on other domain: <input type="text" id="scriptsLocation" value="http://your.other.domain/scripts/location/" /><br />
cookie name: <input type="text" id="cookieName" /><br />
cookie value: <input type="text" id="cookieValue" /><br />
<input type="button" value="Set cookie" onclick="setCookie()" />
<input type="button" value="Get cookie" onclick="getCookie()" />
<input type="button" value="List cookies" onclick="listCookies()" />
</body>
</html>


P.S. Проверять работоспособность конкретного примера в Firefox. IE не хочет динамически грузить скрипты у которых в урле есть параметры. Но если это даже и ограничение IE, то это легко обходится через mod_rewrite.
... << RSDN@Home 1.2.0 alpha rev. 619>>
ICQ [168117153]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.