|
|
|
| Здравствуйте!
На сайте есть один домен.
Возможно ли сделать перенаправление поестителей на другой домен (сайт тот же), но что бы куки сохранились те же?
Спасибо | |
|
|
|
|
|
|
|
для: 1prom
(12.03.2012 в 01:51)
| | А почему вопрос в разделе JS? Это нужно на JS сделать?
______
Напрямую нельзя. Но можно перенаправить передав куки через GET на целевом домене на промежуточный скрипт, который переустановит куки уже для нового домена и сделает еще один редирект без GET строки на нужный адрес, но уже в пределах текущего домена. | |
|
|
|
|
|
|
|
для: Sfinks
(12.03.2012 в 13:27)
| | Нет. Не знал как технически это делается. (если можно перенести тему - пожалуйста, модераторы, пренесите)
Можете пример предоставить?
Нужно:
1) Выбрать в пользователя все куки по домену domen1.com
2) Перенести записать все куки на domen2.com
3) Перенаправить пользователя на domen2.com | |
|
|
|
|
|
|
|
для: 1prom
(12.03.2012 в 23:28)
| | > Выбрать в пользователя все куки по домену domen1.com
При любом обращении к domen1.com, или на конкретном адресе?
[UPD] И если при любом обращении, то может ли в исходном урл быть GET-строка? Если может, то нужно ли ее передавать?
> Перенаправить пользователя на domen2.com
На новый конкретный адрес или на тот же, который был на domen1.com, но на domen2.com? | |
|
|
|
|
|
|
|
для: Sfinks
(12.03.2012 в 23:37)
| | 1) Выбрать в пользователя все куки по домену domen1.com при любом обращении к domen1.com
2) domen1.com и domen2.com ссылаются на один и тот же сервер (сайт). Нужно просто масово пользователей приучить к новому адресу... | |
|
|
|
|
|
|
|
для: 1prom
(12.03.2012 в 23:52)
| | в .htaccess сайта domen1.com пишите строки:
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ http://domen2.com/redirect.php?cookies=%{HTTP_COOKIE}&url=$1 [R=301,L,QSA]
|
На domen2.com в корне создаете redirect.php с таким содержанием:
<?php
$cookies = explode( "; " , $_GET['cookies'] );
foreach( $cookies as $val )
{
list( $cName , $cVal ) = explode( "=" , $val );
setcookie( $cName , $cVal );
}
$redirect = $_GET['url'];
unset( $_GET['cookies'] , $_GET['url'] );
$qs = array();
foreach( $_GET as $key => $val )
$qs[] = $key . "=" . urlencode( $val );
$qs = implode( "&" , $qs );
header( "Location: http://" . $_SERVER['SERVER_NAME'] . "/" . $redirect . "?" . $qs );
?>
|
| |
|
|
|
|
|
|
|
для: Sfinks
(13.03.2012 в 00:14)
| | Я понимаю этот скрипт вызывается постоянно.
Как поставить условие, что бы он вызывался только при простотре domen1.com | |
|
|
|
|
|
|
|
для: 1prom
(13.03.2012 в 00:36)
| | > при простотре domen1.com
при чем? | |
|
|
|
|
|
|
|
для: Sfinks
(13.03.2012 в 00:14)
| | Возникла ошибка:
Request-URI Too Large
The requested URL's length exceeds the capacity limit for this server. | |
|
|
|
|
|
|
|
для: 1prom
(13.03.2012 в 00:48)
| | Начните по этому вопросу новую тему в разделе Апач. Там кто-нить поможет. А в эту тему уже могут и не посмотреть. Кроме того тут проводится такая политика, что под каждый новый вопрос желательно заводить новую тему. | |
|
|
|
|
|
|
|
для: 1prom
(13.03.2012 в 00:48)
| | Кстати, я вот сейчас подумал.....
Перенаправляя пользователя автоматически, вы врядли его к чему-то приучите. Т.е. я набрал domen1.com, меня перекинуло на domen2.com, а я этого даже не заметил. В следующий раз я снова зайду на domen1.com. А т.к. обновление кук на domen1.com не происходит, а устанавливаются они на domen2.com, то скоро на domen1.com они перестанут существовать (если они у вас, конечно, не до 2020 года установлены) и весь "фокус" потеряет смысл.
Поэтому лучше бы сделат по другому: Вывести страницу с информацией о том, что сайт переехал и кнопку "перейти на новый сайт". А в форму с кнопкой скрытыми полями занести все куки. И данные формы передавать методом POST, а не GET. Это и возникшую ошибку исключит. А уже на новом домене прочитать все данные формы и установить куки. | |
|
|
|
|
|
|
|
для: Sfinks
(13.03.2012 в 02:19)
| | Так можно, но в крайнем случае, так как первый домен остается тоже рабочим.
Единственное, что ряд сервисов сайта привязаны к новому домену. Раздвоение доменов мешает единству публикаций и иерархии с другими соц. сетями, которые прривязаны только к доменам, отнудь не к серверам. Вот почему желательно сделать это незаметно. | |
|
|
|
|
|
|
|
для: Sfinks
(12.03.2012 в 23:37)
| | "может ли в исходном урл быть GET-строка? Если может, то нужно ли ее передавать?" - тут я не понимаю, на безопасность это влияет или на другое что-то. Впринципе разница не принципиальна как это сделается | |
|
|
|
|
|
|
|
для: 1prom
(12.03.2012 в 01:51)
| | 1. Имеете адреса http://domen1.ru и http://domen2.ru
2. Перед редиректом с 1-го на 2-й:
-- читаете куки, поставленные страницами с адреса http://domen1.ru
-- записываете содержимое кук в имени окна браузера (window.name = document.cookie;)
3. После редиректа читаете куки, поставленные страницами с адреса http://domen2.ru
4. Если "вторых" кук нет вовсе, то ставите их из имени окна.Если "вторые" есть... то тут думайте сами - клиент уже был по новому адресу, но зашёл почему-то со старого.
5. Имя окна обнуляете (window.name = '';) | |
|
|
|
|
|
|
|
для: ЯСА
(13.03.2012 в 04:01)
| | window.name = document.cookie; - таким образом запишутся все куки?
Как прочитать все куки и узнать есть ли они и как записать их?
Дайте код, пожалуйста | |
|
|
|
|
|
|
|
для: 1prom
(13.03.2012 в 23:47)
| | 1. Конкретная страница домена может прочитать только те куки, к которым у неё есть доступ.
2. Доступ к кукам в пределах домена определяется при их прописывании параметром path.
Если вы path при установке не прописывали, то, по умолчанию, куки доступны только той странице, которая их установила.
3. Код для чтения ВСЕХ кук, доступных странице: var kuki = document.cookie; | |
|
|
|
|
|
|
|
для: ЯСА
(14.03.2012 в 06:18)
| | Нужно:
1) Выбрать в пользователя все куки по домену domen1.com
window.name = document.cookie;
это есть.
Теперь как лучше сделать незаметно для посетителя? сначала перенаправить на новый домен и потом прописать куки или наоборот перенаправить а потом прописать куки на новом домене?
Перенаправить пользователя на domen2.com я знаю
<?
echo "<html><head><meta http-equiv='refresh' content='0; url=domen2.com'></head></html>"; die();
?>
а вот как записать на domen2.com все куки - я так и не понял | |
|
|
|
|
|
|
|
для: 1prom
(16.03.2012 в 00:18)
| | 1. Интересно, что в вашем понимании - "незаметно"?
Куки - они же не калёным железом на лбу посетителя прописываются :-)
2. Вы вообще себя самого прочитали?
Цитирую: "сначала перенаправить на новый домен и потом прописать куки или наоборот перенаправить а потом прописать куки на новом домене?"
Перефразирую по мотивам известной в 90-х годах песни: "утром встать, одеть трусы, затем надеть часы или наоборот, - встав утром, одеть трусы и не забыть надеть часы?":-)
3. Код приблизительно таков:
3.1. Индексная страница сайта на домене1 следующего вида:
<html>
<head>
<script>
window.name = document.cookie;
window.location.href = 'http://domen2.com';
</script>
</head>
</html>
|
Перенаправление с помощью META-тега УБЕРИТЕ.
Совсем уберите.
И ничего другого на этой странице быть уже не должно.
3.2.Индексная страница сайта на домене2:
<html>
<head>
<script>
if (!document.cookie) document.cookie = window.name;
else //здесь решайте сами - что делать, ибо юзер уже на этом адресе бывал
window.name = '';
</script>
...прочее содержание индексной страницы домена2
|
| |
|
|
|
|
|
|
|
для: ЯСА
(16.03.2012 в 01:42)
| | С кодом очень помогли, спасибо.
"Незаметно" - это когда лишь в адресной строчке изменение адресов.
А заметно, - это когда юзеру предлагают где-то нажать, "потыкать" что бы все удачно сохранилось :) | |
|
|
|
|
|
|
|
для: 1prom
(16.03.2012 в 03:32)
| | 1. Как-то я выпустил из виду вариант, что юзер, зашедший на ваш старый адрес (домен1), может быть новичком и кук у него не будет прописано.
2. Исправляю эту свою оплошность.
В коде на индексной странице домена2 надо проверить и этот вариант:
<html>
<head>
<script>
if (!window.name) void (1); //юзер, который зашёл впервые - куки ему поставит новый сайт
else if (!document.cookie) document.cookie = window.name;
else //здесь решайте сами - что делать, ибо юзер уже на этом адресе бывал
window.name = '';
</script>
...прочее содержание индексной страницы домена2
|
| |
|
|
|
|
|
|
|
для: ЯСА
(16.03.2012 в 10:52)
| | перенаправление идет, а вот куки не пишет в броузер на втором домене. Пробовал на Опере и Мозилла.
Можно проверить где ошибка? | |
|
|
|
|
|
|
|
для: 1prom
(17.03.2012 в 15:46)
| | Можно, конечно.
1. Надо проверить сначала на первом домене, дописав посередине (перед window.location.href = ...) строчку alert (unescape (window.name)) и посмотреть - записались ли в имя окна текущие куки
2. Аналогичную строку надо записать и самой первой на втором домене. Передались ли? (Хотя куда они денутся?)
3. В итоге у вас по-любому должны появиться два окошка алерта с одинаковым содержанием.
Или с одинаковой пустотой - если исходные куки не прочитались.
А не прочитаться они не могли в двух случаях:
а) либо их просто нет;
б) либо они есть, но недоступны индексной странице сайта на первом домене. Потому что ставились эти куки не индексной страницей, а какими-то другими страницами сайта на первом домене (с другими URL*). И вы при установке кук не позаботились выставить параметр path="/", делающий куки доступными любой странице сайта.
4. Разумеется, и вариант б) тоже можно решить... но сначала проверьте два алерта.
Примечание: URL страницы - штука уникальная. Если куки поставлены без параметра path="/" страницей с именем index.html, то и прочитать их сможет только страница с точно таким же именем. А вот уже index.htm или index.php - не смогут. | |
|
|
|
|
|
|
|
для: ЯСА
(17.03.2012 в 16:02)
| | Алерты оба работают, значит куки передаются.
Но на новом домене почему то не пишутся в броузер
Напр. кука user: пустая (В Опере смотрю куки...)
Также нет авторизации при последующем запросе
$sqlsee = "SELECT * FROM regpeople where mail_admin = \"$user\" and passw = \"$passw\""; | |
|
|
|
|
|
|
|
для: 1prom
(17.03.2012 в 22:38)
| | Странно...
Попробуйте изменить одну строчку в коде второго домена:
if (!document.cookie) document.cookie = unescape (window.name);
|
| |
|
|
|
|
|
|
|
для: ЯСА
(18.03.2012 в 10:12)
| | Смотрите, может я не все сказал, но у меня есть auto_prepend_file = "menu.php". В нем я пишу:
$wh_domen=$_SERVER["HTTP_HOST"];
$fc = $_SERVER['PHP_SELF'];
if($wh_domen=="domen1.com"){
?>
<html>
<head>
<script>
window.name = document.cookie;
window.location.href = 'http://domen2.com<?=$fc?>';
</script>
</head>
</html>
<?
}
if($wh_domen=="domen2.com"){
?>
<script>
if (!window.name) void (1); //юзер, который зашёл впервые - куки ему поставит новый сайт
else if (!document.cookie) document.cookie = unescape (window.name);
else //здесь решайте сами - что делать, ибо юзер уже на этом адресе бывал
window.name = '';
</script>
<?
}
|
| |
|
|
|
|
|
|
|
для: 1prom
(18.03.2012 в 17:50)
| | Я не знаю, что такое auto_prepend_file
-----
Всякие куки, только что поставленные, тут же можно и прочитать.
Поэтому, для проверки в файле второго домена:
<script>
alert (unescape (window.name)); //куки пришли
if (!window.name) void (1); //юзер, который зашёл впервые - куки ему поставит новый сайт
else if (!document.cookie) {document.cookie = unescape (window.name); alert (unescape (document.cookie))} //куки поставлены, прочитаны и отображены
else void 1(); //здесь решайте сами - что делать, ибо юзер уже на этом адресе бывал
window.name = '';
</script>
|
Походу Вы так и оставили моё замечание "здесь решайте сами...".
Надо было именно РЕШАТЬ, а не тупо переписывать.
Это синтаксическая ошибка - из-за этого у вас ничего и не работает.
А глянуть в "Консоль ошибок" браузера вам что не даёт? | |
|
|
|
|
|
|
|
для: ЯСА
(16.03.2012 в 10:52)
| | пост подвоен, удалите его, модератор | |
|
|
|
|
|
|
|
для: ЯСА
(16.03.2012 в 01:42)
| | по поводу вариантов перенаправления я немного погорячился (сделал ошибку) так как думал, что есть вариант сначала прописать куки на новом домене, а потом перенаправить, чтобы новый домен читал удачно все куки, страницы отображались бы без изменений :) | |
|
|
|
|
|
|
|
для: 1prom
(16.03.2012 в 03:39)
| | Вы поймите, что 2 разных домена - это 2 изолированных области видимости. Между ними черная глухая непрозрачная стена!!! Невозможно находясь на одном домене установить куки для другого или перейти на другой и посмотреть что было на первом. НУ НЕ ВИДНО СКВОЗЬ СТЕНУ!!! Но стену можно как-то перекинуть или еще как-то вывернуться. Перекинуть - это как я написал. Т.е. стандартно передать данные. Но у вас там похоже 100 килограмм кук и перекинуть их не получается. Значит нужно выворачиваться! Например прилепить на потолок над стеной зеркало и в нем посмотреть что же там за стеной. Зеркалом на потолке вам предлагают использовать заголовок окна. Т.е. ставите стремянку и прикручиваете к потолку зеркало. Потом слазиете, открываете дверь и уходите за стену. Там поднимаете голову и смотрите в зеркало. Вот и все. Куки никуда не передаются. Они где были там и есть. Просто их отразили в общедоступную зону. | |
|
|
|