Моя сессия PHP не сохранится на hostgator - PullRequest
2 голосов
/ 10 августа 2010

Из моей головы. Как это исправить? Мой сеанс не работает на сервере hostgator. Но на другом сервере все работает нормально.

Вот пример кода.

<form action="/payment-select/" method="post">
 <select name="payment" onchange="this.form.submit()">
 <option value=""<?php if(empty($_SESSION['payment'])) { echo ' selected="selected"'; } ?>><?php echo $lang_please_select; ?></option>
 <?php 
  $sp = 'SELECT * FROM payment';
  $qp   = $db->rq($sp);
  while($payment = $db->fetch($qp)) {
  ?>
 <option value="<?php echo $payment['bank']; ?>"<?php if($_SESSION['payment'] == $payment['bank']) { echo ' selected="selected"'; } ?>><?php echo $payment['bank']; ?></option>
 <?php } ?>
 </select>
 </form>

/payment-select/

include_once('includes/connection.php'); // session_start() here
include_once('includes/formatting.php');

$_SESSION['payment'] = strip_html_tags($_POST['payment']); 

header("location:/payment/");
exit();

Обновление

  1. Все необходимые страницы имеют session_start() сверху.
  2. Я устанавливаю скрипт на server A, работающий нормально. Тогда server B нормально .. Но на hostgator с тем же phpinfo $_SESSION['payment'] не сохранится после перенаправления заголовка на страницу /payment/.

Я не разделяю сеанс между серверами. Это что-то вроде того, как я устанавливаю WordPress на сервере A нормально, с сервером B все в порядке и проблема с сервером C. (ситуация на примере)

Ответы [ 4 ]

2 голосов
/ 10 августа 2010

Сессии не распределяются между серверами. Если вы передаете пользователя с сеансом на одном сервере на страницу на другом (где вы хотите сохранить сеанс), вам необходимо разработать метод его передачи. Предпочтительно с токеном и зашифрованным сериализованным $_SESSION, который затем может быть аутентифицирован и загружен.

Хост 1

$s = serialize($_SESSION);
$enc = encrypt($s); // However you want to encrypt it, I recommend it.
$token = gen_token(); // Again, find a good way to generate a secure token;

Хост 2

$token = $_POST['token'];
if(is_valid($token))
{
    // Load the session (wrapped in a function, basically loop through the
    // array and load the respective values.
    load_session(unserialize(decrypt($_POST['enc'])));
}
0 голосов
/ 20 января 2011

Для чего это стоит, у меня похожая проблема на hostgator. Отключение «php.ini QuickConfig» в cPanel устранило проблему, поэтому, вероятно, это была неправильная настройка на этой странице. Я подозреваю, что это был неправильный путь, но не могу подтвердить это.

0 голосов
/ 10 августа 2010

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

0 голосов
/ 10 августа 2010

Было бы полезно уточнить, как это не работает. Моим первоначальным предложением было бы указать, есть ли у вас session_start(); на всех страницах, где используется $_SESSION. Не зная далее, что не работает, трудно предложить что-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...