PHP: переменная сессии не может использоваться, когда сайт перенаправлен - PullRequest
5 голосов
/ 02 сентября 2008

Я должен администрировать небольшой веб-сайт для моей группы выпускников, который размещен моим ISV. URL-адрес что-то вроде www.myIsv.com/myWebSite/, который довольно уродливый и очень заброшенный. Главный администратор веб-сервера зарегистрировал доменное имя www.mysmallwebsite.com и поместил index.html с таким содержанием:

<html>
<head>
<title>www.mysmallwebsite.com</title>
</head>

<frameset>
   <frame src="http://www.myIsv.com/myWebSite/" name="redir">
      <noframes>
        <p>Original location:
          <a href="www.myIsv.com/myWebSite/">http://www.myIsv.com/myWebSite/</a>
        </p>
      </noframes>
 </frameset>  
</html>

Работает нормально, но некоторые функции, такие как переменные PHP-сессии, больше не работают! У кого-нибудь есть предложения по исправлению этого?

Edit: Это не работает как в IE, так и в Firefox (без плагинов)

Спасибо

Ответы [ 10 ]

4 голосов
/ 02 сентября 2008

Сессии привязаны к серверу И домена. Использование набора фреймов в домене вызовет все виды поломок, потому что это не совсем так, как было задумано.

Попробуйте использовать apache mod rewrite, чтобы создать «перенаправление при передаче», флаг « proxy » ([P]) в правиле - это магический флаг, который вам нужен

Документация на http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html

0 голосов
/ 02 сентября 2008

Вы также можете установить cookie на стороне пользователя, а затем проверить наличие этого cookie непосредственно после перенаправления, которое, если вас беспокоят удобные URL-адреса, будет означать, что вам не нужно передавать PHPSESSID в строка запроса.

0 голосов
/ 02 сентября 2008

Когда люди приходят на сайт www.mysmallwebsite.com, я просто перенаправляю на http://www.myIsv.com/myWebSite/

<?php header('Location: http://www.myIsv.com/myWebSite/'); ?>

Это все, что я хотел бы иметь на www.mysmqllwebsite.com/index.php
Таким образом, вам не нужно беспокоиться о совместимости браузеров или о том, что сеансы работают, просто сделайте переадресацию, и все будет хорошо.

0 голосов
/ 02 сентября 2008

Какой у вас браузер / реклама? это может быть ваш браузер или какое-либо другое программное обеспечение (может быть, даже веб-сервер), блокирующее сеансы из http://www.myIsv.com/myWebSite/, работающего из-во фрейма, так как он расположен на другом сайте, считая его атакой XSS.

Если сеанс работает на http://www.myIsv.com/myWebSite/ без фрейма, вы всегда можете использовать перенаправление с http://www.mysmallwebsite.com на некрасивый URL вместо использования фрейма.

EDIT: Я только что попробовал ваш фрейм-код на моем сайте, который использует сессии, Firefox работал нормально, я вошел в систему и остался в системе, но IE7 снова вывел меня из системы.

0 голосов
/ 02 сентября 2008

Таким образом, когда вы помещаете ссылку html на уродливое доменное имя, предполагая, что это тот же PHP-сервер (с теми же инициализированными сеансами), вы можете поместить его следующим образом ...

www.myIsv.com/myWebSite/?PHPSESSID=<?=session_id()?>

С точки зрения безопасности, я действительно очень надеюсь, что это не сработает

0 голосов
/ 02 сентября 2008

@ pix0r www.myIsv.com/myWebSite/ -> работа с переменными сеанса www.mysmallwebsite.com -> переменная сеанса не работает

@ Александр К сожалению, это не на том же веб-сервере

0 голосов
/ 02 сентября 2008

Это не работает, потому что на клиентских сессиях для каждого домена. Все файлы cookie сохраняются для mysmallwebsite.com, поэтому myIsv.com не может получить к ним доступ.

0 голосов
/ 02 сентября 2008

Вставьте session_start () в начале вашего скрипта и посмотрите, сможете ли вы снова получить доступ к переменным.

0 голосов
/ 02 сентября 2008

Работают ли переменные сеанса, если вы нажмете http://www.myIsv.com/myWebSite/ напрямую? Мне кажется, что конфигурация сервера будет диктовать, будут ли сеансы работать. Однако, если вы как-то начинаете сеанс на www.mysmallwebsite.com (не похоже, что вы используете PHP, но, возможно, так и есть), вы не сможете передавать данные сеанса, не написав какой-либо бэкэнд логика, которая перемещает сеанс с сервера на сервер.

0 голосов
/ 02 сентября 2008

Что ты имеешь в виду? Вы хотите сказать, что при переходе с www.mysmallwebsite.com на www.myIsv.com/myWebSite/ сеанс PHP теряется?

PHP распознает сеанс с идентификатором (буквенно-цифровой хэш, сгенерированный на сервере). Идентификатор передается от запроса к запросу с использованием файла cookie, называемого PHPSESSID, или чего-то подобного (вы можете просматривать файлы cookie, которые веб-сайты устанавливают с помощью вашего браузера ... в Firefox у вас есть Firebug + FireCookie и замечательная панель инструментов веб-разработчика .. с помощью которого вы можете просмотреть список печенья без пота).

Итак ... PHP передает идентификатор сессии через файл cookie PHPSESSID. Но вы можете передать идентификатор сеанса в виде простых параметров запроса GET.

Поэтому, когда вы помещаете ссылку html на уродливое доменное имя, предполагая, что это тот же PHP-сервер (с теми же инициализированными сеансами), вы можете поместить его следующим образом ...

www.myIsv.com/myWebSite/?PHPSESSID=<?=session_id()?>

Я некоторое время не работал с PHP, но думаю, что это сработает.

...