|
|
|
| Два домена находятся на одном ВДС.
На первом домене скрипт сбора статистики записывает в сессию имя поисковой системы и ключевые слова, по которым пришел посетитель.
На перовом сайте есть ссылка на второй сайт, по которой переходят некотороые посетители. При этом на втором сайте открывается своя, самостоятельная сессия.
Вопрос состоит в следующем.
Как в сессию на втором сайте передать информацию из сессии первого сайта? | |
|
|
|
|
|
|
|
для: Владимир55
(29.07.2008 в 09:49)
| | Через $_GET или $_POST можно. | |
|
|
|
|
|
|
|
для: Axxil
(29.07.2008 в 11:00)
| | Не могли бы Вы прояснить, как именно?
Предположим, что в сесии первого сайта есть переменная $slovo = "Слоны Африки";
Теперь посетитель, ранее пришедший на первый сайт по этой фразе, переходит на второй сайт и открывается новая самостоятельная сессия для переменной $slovo. Изначально эта переменная пуста. Как наполнить её информацией, содержащейся в сессии первого сайта? | |
|
|
|
|
|
|
|
для: Владимир55
(29.07.2008 в 11:19)
| | К ссылке на второй сайт добавлять параметр &slovo=$_SESSION['slovo']
И на втором сайте этот параметр записывать в сессию $_SESSION['slovo'] = $_GET['slovo'];
Если не хотите чтобы пользователи видели это явно, можно простенько зашифровать этот параметр | |
|
|
|
|
|
|
|
для: Axxil
(29.07.2008 в 11:38)
| | Я так понимаю, что это не решение проблемы, может передаваться любое слово из сессии. Скорей всего надо юзать разделяемый файл. | |
|
|
|
|
|
|
|
для: GeorgeIV
(29.07.2008 в 11:42)
| | А как вы будете определять какому идентификатору сессии какой файл относится?
Можно, конечно, на первом сайте весь массив $_SESSION записывать в файл с именем равным session_id(); И потом этот id передавать на второй сайт (всё равно что-то передавать через $_GET придётся. Иначе вряд ли получится), который будет считывать всю сессию с первого хоста.
Но это как-то слишком мудрёно. | |
|
|
|
|
|
|
|
для: Axxil
(29.07.2008 в 11:46)
| | Я примерно так и собрался делать - через текстовый файл, имя которого будет включено в адрес. Но мне это показалось несколько грубоватым, что ли...
&slovo=$_SESSION['slovo'] А Кириллица будет нормально передаваться? | |
|
|
|
|
|
|
|
для: Владимир55
(29.07.2008 в 11:51)
| | &slovo=urlencode($_SESSION['slovo']);
и потом на втором хосте $_SESSION['slovo'] = urldecode($_GET['slovo']);
> Но мне это показалось несколько грубоватым, что ли..
не только в этом проблема. Будет куча подключений к первому хосту для считывания сессии. А это - паразитный траффик. Лучше тогда, сессию сериализовать сделать какой-нить base64_encode и полностью передавать через $_GET. | |
|
|
|
|
|
|
|
для: Axxil
(29.07.2008 в 11:56)
| | 2Владимир55: просто передавайте идентификатор сессии через GET, какие проблемы?
> и потом на втором хосте $_SESSION['slovo'] = urldecode($_GET['slovo']);
Этого делать не стоит. | |
|
|
|
|
|
|
|
для: BinLaden
(29.07.2008 в 12:09)
| | > просто передавайте идентификатор сессии через GET, какие проблемы?
Допустим передал. Дальше что?
> Этого делать не стоит.
Для параноиков.
$_SESSION['slovo'] = preg_replace('|[^а-я ]|is','',urldecode($_GET['slovo']));
|
| |
|
|
|
|
|
|
|
для: Axxil
(29.07.2008 в 12:36)
| | > Допустим передал. Дальше что?
И запускайте сессию с таким же идентификатором. Главное, чтобы у обоих сайтов tmp-папка для файлов сессии была одна. Но раз сервер один, то это не проблема.
> Для параноиков.
Этого делать не стоит, потому что URL-декодирование происходит на уровне ядра PHP. | |
|
|
|
|
|
|
|
для: BinLaden
(29.07.2008 в 12:42)
| | > потому что URL-декодирование происходит на уровне ядра PHP.
И в чём засада то? | |
|
|
|
|
|
|
|
для: Axxil
(29.07.2008 в 12:47)
| | > И в чём засада то?
В том, что Вы пытаетесь декодировать то, что уже декодировано, а значит Вы можете просто испортить данные. | |
|
|
|
|
|
|
|
для: BinLaden
(29.07.2008 в 12:48)
| | > В том, что Вы пытаетесь декодировать то, что уже декодировано,
Если я лично кодировал эту переменную на первом хосте перед отправкой. То что я могу испортить? | |
|
|
|
|
|
|
|
для: Axxil
(29.07.2008 в 12:51)
| | > Если я лично кодировал эту переменную на первом хосте перед отправкой. То что я могу испортить?
Эй, есть кто там? :) Я повторяю: декодирование производит сам PHP еще до начала разбора скрипта. А то, что Вы URL-кодировали - хорошо. Потому что это необходимо, а не опционально. | |
|
|
|
|
|
|
|
для: BinLaden
(29.07.2008 в 12:54)
| | Здесь согласен. Погорячился. | |
|
|
|
|
|
|
|
для: BinLaden
(29.07.2008 в 12:42)
| | > Но раз сервер один, то это не проблема.
Как раз на нормальном сервере папки сессий разделяют для разных хостов. А то один юзверь может выставить лайфтайм для сессий в 10 секунд, для прикола, а остальные будут башку ломать, почему это у них авторизация так мало живёт :)
PS Но в данном случае имеем дедик. Поэтому этот трабл не актуален. | |
|
|
|
|
|
|
|
для: Axxil
(29.07.2008 в 12:49)
| | > А то один юзверь может выставить лайфтайм для сессий в 10 секунд
На нормальном сервере, если уж на то пошло, никто не будет позволять юзеру выставлять какие-то там лайфтаймы для всей папки.
[поправлено модератором] | |
|
|
|
|
|
|
|
для: BinLaden
(29.07.2008 в 12:52)
| | > На нормальном сервере, если уж на то пошло, никто не будет позволять юзеру выставлять какие-то там лайфтаймы для всей папки.
Если сервер настроен так, что для каждого хоста своя tmp папка, то вполне можно позволить юзеру выставлять время жизни сессий, каким вздумается.
[поправлено модератором] | |
|
|
|
|
|
|
|
для: Axxil
(29.07.2008 в 12:55)
| | > Если сервер настроен так
А если сервер настроен не так или сервера вообще нет? Не надо ничего придумывать, пожалуйста. Человек сказал ясно - у него VDS и ему нужно решить проблему.
[поправлено модератором] | |
|
|
|
|
|
|
|
для: Axxil
(29.07.2008 в 12:36)
| | Ещё можно через save_session_path() (или вообще через php.ini) установить одну дирректорию для сохранения сессий на обоих хостах, если они на одном сервере находятся. И действительно передавать идентификатор сессии | |
|
|
|