Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Передачи информации из сессии между доменами.
 
 автор: Владимир55   (29.07.2008 в 09:49)   письмо автору
 
 

Два домена находятся на одном ВДС.

На первом домене скрипт сбора статистики записывает в сессию имя поисковой системы и ключевые слова, по которым пришел посетитель.

На перовом сайте есть ссылка на второй сайт, по которой переходят некотороые посетители. При этом на втором сайте открывается своя, самостоятельная сессия.

Вопрос состоит в следующем.
Как в сессию на втором сайте передать информацию из сессии первого сайта?

  Ответить  
 
 автор: Axxil   (29.07.2008 в 11:00)   письмо автору
 
   для: Владимир55   (29.07.2008 в 09:49)
 

Через $_GET или $_POST можно.

  Ответить  
 
 автор: Владимир55   (29.07.2008 в 11:19)   письмо автору
 
   для: Axxil   (29.07.2008 в 11:00)
 

Не могли бы Вы прояснить, как именно?

Предположим, что в сесии первого сайта есть переменная $slovo = "Слоны Африки";

Теперь посетитель, ранее пришедший на первый сайт по этой фразе, переходит на второй сайт и открывается новая самостоятельная сессия для переменной $slovo. Изначально эта переменная пуста. Как наполнить её информацией, содержащейся в сессии первого сайта?

  Ответить  
 
 автор: Axxil   (29.07.2008 в 11:38)   письмо автору
 
   для: Владимир55   (29.07.2008 в 11:19)
 

К ссылке на второй сайт добавлять параметр &slovo=$_SESSION['slovo']
И на втором сайте этот параметр записывать в сессию $_SESSION['slovo'] = $_GET['slovo'];

Если не хотите чтобы пользователи видели это явно, можно простенько зашифровать этот параметр

  Ответить  
 
 автор: GeorgeIV   (29.07.2008 в 11:42)   письмо автору
 
   для: Axxil   (29.07.2008 в 11:38)
 

Я так понимаю, что это не решение проблемы, может передаваться любое слово из сессии. Скорей всего надо юзать разделяемый файл.

  Ответить  
 
 автор: Axxil   (29.07.2008 в 11:46)   письмо автору
 
   для: GeorgeIV   (29.07.2008 в 11:42)
 

А как вы будете определять какому идентификатору сессии какой файл относится?
Можно, конечно, на первом сайте весь массив $_SESSION записывать в файл с именем равным session_id(); И потом этот id передавать на второй сайт (всё равно что-то передавать через $_GET придётся. Иначе вряд ли получится), который будет считывать всю сессию с первого хоста.
Но это как-то слишком мудрёно.

  Ответить  
 
 автор: Владимир55   (29.07.2008 в 11:51)   письмо автору
 
   для: Axxil   (29.07.2008 в 11:46)
 

Я примерно так и собрался делать - через текстовый файл, имя которого будет включено в адрес. Но мне это показалось несколько грубоватым, что ли...

&slovo=$_SESSION['slovo'] А Кириллица будет нормально передаваться?

  Ответить  
 
 автор: Axxil   (29.07.2008 в 11:56)   письмо автору
 
   для: Владимир55   (29.07.2008 в 11:51)
 

&slovo=urlencode($_SESSION['slovo']);

и потом на втором хосте $_SESSION['slovo'] = urldecode($_GET['slovo']);

> Но мне это показалось несколько грубоватым, что ли..
не только в этом проблема. Будет куча подключений к первому хосту для считывания сессии. А это - паразитный траффик. Лучше тогда, сессию сериализовать сделать какой-нить base64_encode и полностью передавать через $_GET.

  Ответить  
 
 автор: BinLaden   (29.07.2008 в 12:09)   письмо автору
 
   для: Axxil   (29.07.2008 в 11:56)
 

2Владимир55: просто передавайте идентификатор сессии через GET, какие проблемы?

> и потом на втором хосте $_SESSION['slovo'] = urldecode($_GET['slovo']);

Этого делать не стоит.

  Ответить  
 
 автор: Axxil   (29.07.2008 в 12:36)   письмо автору
 
   для: BinLaden   (29.07.2008 в 12:09)
 

> просто передавайте идентификатор сессии через GET, какие проблемы?
Допустим передал. Дальше что?

> Этого делать не стоит.
Для параноиков.
$_SESSION['slovo'] = preg_replace('|[^а-я ]|is','',urldecode($_GET['slovo']));

  Ответить  
 
 автор: BinLaden   (29.07.2008 в 12:42)   письмо автору
 
   для: Axxil   (29.07.2008 в 12:36)
 

> Допустим передал. Дальше что?

И запускайте сессию с таким же идентификатором. Главное, чтобы у обоих сайтов tmp-папка для файлов сессии была одна. Но раз сервер один, то это не проблема.

> Для параноиков.

Этого делать не стоит, потому что URL-декодирование происходит на уровне ядра PHP.

  Ответить  
 
 автор: Axxil   (29.07.2008 в 12:47)   письмо автору
 
   для: BinLaden   (29.07.2008 в 12:42)
 

> потому что URL-декодирование происходит на уровне ядра PHP.
И в чём засада то?

  Ответить  
 
 автор: BinLaden   (29.07.2008 в 12:48)   письмо автору
 
   для: Axxil   (29.07.2008 в 12:47)
 

> И в чём засада то?
В том, что Вы пытаетесь декодировать то, что уже декодировано, а значит Вы можете просто испортить данные.

  Ответить  
 
 автор: Axxil   (29.07.2008 в 12:51)   письмо автору
 
   для: BinLaden   (29.07.2008 в 12:48)
 

> В том, что Вы пытаетесь декодировать то, что уже декодировано,
Если я лично кодировал эту переменную на первом хосте перед отправкой. То что я могу испортить?

  Ответить  
 
 автор: BinLaden   (29.07.2008 в 12:54)   письмо автору
 
   для: Axxil   (29.07.2008 в 12:51)
 

> Если я лично кодировал эту переменную на первом хосте перед отправкой. То что я могу испортить?

Эй, есть кто там? :) Я повторяю: декодирование производит сам PHP еще до начала разбора скрипта. А то, что Вы URL-кодировали - хорошо. Потому что это необходимо, а не опционально.

  Ответить  
 
 автор: Axxil   (29.07.2008 в 12:58)   письмо автору
 
   для: BinLaden   (29.07.2008 в 12:54)
 

Здесь согласен. Погорячился.

  Ответить  
 
 автор: Axxil   (29.07.2008 в 12:49)   письмо автору
 
   для: BinLaden   (29.07.2008 в 12:42)
 

> Но раз сервер один, то это не проблема.
Как раз на нормальном сервере папки сессий разделяют для разных хостов. А то один юзверь может выставить лайфтайм для сессий в 10 секунд, для прикола, а остальные будут башку ломать, почему это у них авторизация так мало живёт :)

PS Но в данном случае имеем дедик. Поэтому этот трабл не актуален.

  Ответить  
 
 автор: BinLaden   (29.07.2008 в 12:52)   письмо автору
 
   для: Axxil   (29.07.2008 в 12:49)
 

> А то один юзверь может выставить лайфтайм для сессий в 10 секунд

На нормальном сервере, если уж на то пошло, никто не будет позволять юзеру выставлять какие-то там лайфтаймы для всей папки.

[поправлено модератором]

  Ответить  
 
 автор: Axxil   (29.07.2008 в 12:55)   письмо автору
 
   для: BinLaden   (29.07.2008 в 12:52)
 

> На нормальном сервере, если уж на то пошло, никто не будет позволять юзеру выставлять какие-то там лайфтаймы для всей папки.

Если сервер настроен так, что для каждого хоста своя tmp папка, то вполне можно позволить юзеру выставлять время жизни сессий, каким вздумается.


[поправлено модератором]

  Ответить  
 
 автор: BinLaden   (29.07.2008 в 13:00)   письмо автору
 
   для: Axxil   (29.07.2008 в 12:55)
 

> Если сервер настроен так

А если сервер настроен не так или сервера вообще нет? Не надо ничего придумывать, пожалуйста. Человек сказал ясно - у него VDS и ему нужно решить проблему.

[поправлено модератором]

  Ответить  
 
 автор: Axxil   (29.07.2008 в 12:46)   письмо автору
 
   для: Axxil   (29.07.2008 в 12:36)
 

Ещё можно через save_session_path() (или вообще через php.ini) установить одну дирректорию для сохранения сессий на обоих хостах, если они на одном сервере находятся. И действительно передавать идентификатор сессии

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования