Ваше описание происходящего выглядит неверным.
Это не (или, по крайней мере, не должно), что это происходит. Когда браузер запрашивает http://server.com/login и возвращает в ответ заголовок Set-Cookie
, cookie устанавливается и ограничивается доменом server.com
, даже если ответ редирект. Если вы видите файл cookie «auth», отправленный на client.com
, то это файл cookie, который client.com
был установлен ранее.
В любом случае, похоже, что вас действительно волнует, это
Существует множество причин, по которым это может происходить.
server.com
Access-Control-Allow-Origin: http://client.com
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin
при отправке учетных данных. Также обратите внимание, что источник должен быть точным совпадением, включая схему (http или https). На практике обычно серверы читают заголовок Origin
запроса, сверяют его с белым списком и, если это разрешено, копируют значение заголовка Origin
из запроса в заголовок Access-Control-Allow-Origin
в ответе. [тысяча сто тридцать одна] xhr.withCredentials = true
в своем запросе XHR. (См. MDN для более подробной информации.) Затем, после того, как вы все это сделали, у вас на пути будет еще одно препятствие. Поскольку вы используете client.com
и пытаетесь отправить файл cookie на server.com
, файл cookie server.com
считается «сторонним». AFAIK У всех основных браузеров есть настройка, которая блокирует сторонние куки для конфиденциальности, потому что они чаще всего используются трекерами для сбора маркетинговых данных для рекламы. Я считаю, что большинство из них по умолчанию блокируют сторонние куки, но я не уверен в этом. Наверняка многие люди установили в своих браузерах блокировку сторонних файлов cookie.
Таким образом, вы должны сообщить своим посетителям, чтобы они настраивали свой браузер для разрешения сторонних файлов cookie из server.com
.
Кстати, небезопасно устанавливать cookie при перенаправлении в другой домен. Хотя это разрешено по спецификации AFAIK, возникли проблемы с поддержкой браузера. См., Например, эту ошибку Chrome .
Это должно сделать это:
<script>
function checkUncheck(form, setTo) {
var c = document.getElementById(form).getElementsByTagName('input');
for (var i = 0; i < c.length; i++) {
if (c[i].type == 'checkbox') {
c[i].checked = setTo;
}
}
}
</script>
<form id='myForm'>
<input type='checkbox' name='test' value='1'><br>
<input type='checkbox' name='test' value='1'><br>
<input type='checkbox' name='test' value='1'><br>
<input type='checkbox' name='test' value='1'><br>
<input type='checkbox' name='test' value='1'><br>
<input type='button' onclick="checkUncheck('myForm', true);" value='Check'>
<input type='button' onclick="checkUncheck('myForm', false);" value='Uncheck'>
</form>
function findCheckBoxes(el, check) {
for(var i=0;el.childNodes[i];i++)
{
var child = el.childNodes[i];
if (child.type=="checkbox")
{
child.checked = check;
}
if (child.childNodes.length > 0)
this.findCheckBoxes(child, check);
}
}
Каждый входной элемент имеет атрибут, введите, который для флажков является "флажком", таким образом, Вы могли попробовать что-то вроде этого:
for (var i = 0; i < document.myForm.elements.length; i++) {
if (document.myForm.elements[i].type == "checkbox") {
document.myForm.elements[i].checked = true;
}
}
выполните итерации через form.elements набор и проверьте .type == "флажок".
var button = getSelectAllButtonInFormSomeHow();
/*all formelements have a reference to the form. And the form has an elements-collection.*/
var elements = button.form.elements;
for(var i = 0; i < elements.length;i++) {
var input = elements[i];
if (input.tagName == "input" && input.type == "checkbox") input.checked = true;
}
Если jQuery является опцией, можно сделать это скорее легко.
См. документацию относительно селекторов jQuery. (Последний пример в разделе показывает, как сделать это с переключателями, но просто заменить это флажками.)
Действительно ли присвоение является классом ко всем необходимым элементам флажка опция? Если да, то это - то, как я сделал бы это (принимающий "class_name" название класса CSS, существующего во всех рассматриваемых элементах флажка):
function selectCheckBoxes(bChecked) {
var aCheckBoxes = YAHOO.util.Dom.getElementsByClassName('class_name', 'input');
for (var i = 0; i < aCheckBoxes.length; i++) {
aCheckBoxes[i].checked = bChecked;
}
}
Если Вы захотите избегать классов, но сможете получить родительский элемент идентификатором (или любой другой метод, то я буду использовать идентификатор в примере, хотя), чем Вы может сделать это:
function selectCheckBoxes(bChecked) {
var oParent = document.getElementById('parentsID');
var aElements = oParent.getElementsByTagName('input');
for (var i = 0; i < aElements.length; i++) {
if (aElements[i].type == 'checkbox') {
aElements[i].checked = bChecked;
}
}
}
Я придерживался бы метода "класса", как бы то ни было.