PHP:переменная сеанса не может использоваться при перенаправлении сайта

StackOverflow https://stackoverflow.com/questions/38370

  •  09-06-2019
  •  | 
  •  

Вопрос

Мне нужно администрировать небольшой веб-сайт для моей группы выпускников, который размещается у моего независимого поставщика программного обеспечения.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, больше не работают!У кого-нибудь есть предложения по исправлению этого?

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

Спасибо

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

@Alexandru К сожалению, это не тот же веб-сервер.

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

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

РЕДАКТИРОВАТЬ:Я только что попробовал ваш код фрейма на своем сайте, который использует сеансы, Firefox работал нормально, я входил в систему и оставался в системе, но IE7 снова вывел меня из системы.

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top