2014-11-13 2 views
2

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

login.php для ввода регистрационной информации, checklogin.php проверить входные учетные данные затем home.php в качестве целевой страницы

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

Конфигурация настроена. Я работал в течение всех трех дней, тогда «poof» просто не хочет устанавливать сеансы больше. Я могу установить его и отобразить, но если я попытаюсь перенести его на другую страницу, это не сработает.

Может ли кто-нибудь объяснить, что могло произойти только волшебным образом в течение трех дней, которые решили просто погубить все?

Несколько замечаний:

  • Да, я использую session_start(); на своей целевой странице, и любой я намерен принять сеансы.
  • Я использовал теги, чтобы дать вам представление о том, что программное обеспечение мой сервер для веб-страниц (Так как я все еще не уверены, что причиной его)
  • Путь PHP сеанса /var/lib/php/sessions/, который имеет необходимые разрешения для Apache/nginx
  • MySQL собирает данные, а php устанавливает сеансы на стр. 2, но затем страница 3, похоже, потеряла сеансы.

Вот пример быстрого броска вместе, я сделал, чтобы проверить это:

Страница 1: Установка сессий:

<?php 
session_start(); 
require_once'../connect.php'; // Database connection 
$user_info = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE id = '1'")); 

$_SESSION['myid'] = $user_info['id']; 
$_SESSION['myuser'] = $user_info['username']; 

// Echo the set sessions just to make sure they set 

echo 'ID: ' . $_SESSION['myid'] . ' - Username: ' . $_SESSION['myuser'] . ''; 
echo '<br /><a href="/page2.php">Click here to take your sessions to the next page</a>'; 
?> 

Page 2: Переходим с сессиями:

<?php 
session_start(); 
echo 'ID: ' . $_SESSION['myid'] . ' - Username: ' . $_SESSION['myuser'] . ''; 
?> 

Как вы можете видеть из основного примера выше, страница 2 должна отображать мои сеансы, но это просто не будет. Любая помощь с этим очень ценится, это сводит меня с ума, главным образом, из-за того, что я не знаю, что ее вызывает. Сообщите мне, если вам нужна дополнительная информация, и я постараюсь быть максимально конкретным.

+0

Получаете ли вы какие-либо ошибки или просто ничего, когда пытаетесь отобразить переменные сеанса на стр. 2? (Убедитесь, что сообщения об ошибках включены) Также убедитесь, что в папке tmp осталось место, и у вас есть разрешение на запись! – Rizier123

+2

Добавьте сообщение об ошибках в начало вашего файла (ов) сразу после открытия тега '

+0

Хорошо, теперь я получаю сообщение об ошибке, которое я не делал ранее на двух тестовых страницах, которые я создал: 'Предупреждение: Неизвестно: запись не удалась: на устройстве не осталось места (28) в Unknown on line 0' – SmurfTheSmurf

ответ

1

Ну, я, наконец, решил, где я ошибся, поэтому я объясню, для кого это проблема.

Наличие PHP-сессий, хранящихся в /var/lib/php/session, было моей главной проблемой, а не из-за разрешений на чтение и запись, а потому, что раздел каталога / был абсолютно крошечным и заполнен журналами.

Быстрое исправление будет просто удалить журналы и все остальное, захламление каталога, но я лично пошел с двигающейся сессией, хранящей каталог на больший раздел: /home

Вы можете сделать это в файле php.ini который, вероятно, будет установлен либо /tmp/var/lib/php/session или

; session.save_path = "/home" 

Вам необходимо будет перезапустить любую службу PHP и/или веб-сервер, вы работаете, чтобы перезагрузить php.ini, в моем случае был Nginx и PHP-FPM

$ service nginx restart 
$ service php-fpm restart 

(в зависимости от ОС) Вы можете проверить, насколько большой ваши перегородки на сервере с:

$ df -h 

который должен дать вам что-то вроде этого:

> df -h 
Filesystem   Size Used Avail Use% Mounted on 
/dev/mapper/VolGroup-lv_root 
         50G 6.1G 41G 13%/
tmpfs     12G  0 12G 0% /dev/shm 
/dev/sdb1    477M 60M 392M 14% /boot 
/dev/mapper/VolGroup-lv_home 
         409G 71M 388G 1% /home 

Так просто выбрать предпочитаемый раздел и сделать его своим сеансом в php.ini

Спасибо всем, кто прокомментировал попытку помочь решить мою проблему :)

+0

приятно, что вы выкармливаете! (BTW: вы можете принять свой собственный ответ !, а upvote будет приятным для моего aeffort) – Rizier123

1

Первое TODO в такой ситуации, чтобы включить ошибки отчетов с этим:

<?php 
    error_reporting(E_ALL); 
    ini_set("display_errors", 1); 
?> 

После этого я предположил бы, вы не должны писать permission на вашем tmp папку или папку tmp является full!

Так что проверьте свои права на папку, и если у нее осталось место.

+0

Мне удалось установить его на одном сервере, в папке '/ tmp /' была резервная копия базы данных размером 14 ГБ. Ха. В любом случае, мои два других сервера, похоже, хотят быть упрямыми. Я поставил эти две тестовые страницы на них и получил эту ошибку: 'Warning: Unknown: Не удалось записать данные сеанса (файлы). Убедитесь, что текущая настройка session.save_path верна (/ var/lib/php/session) в Unknown в строке 0' Путь верен, и все три сервера имеют одинаковые настройки php.ini. Он также имеет правильные разрешения. – SmurfTheSmurf

+0

@ Equinox04 хм хорошо! Но подсказка с резервной копией была хорошей? не так ли?; D – Rizier123

+0

Ха-ха, да, это было, спасибо :) Один фиксированный, два, чтобы идти. – SmurfTheSmurf

0

Какая версия PHP работает на ваших серверах? Недавно я потерял аутентификацию для входа в систему из-за обновления до PHP v5.4 («не уверен»).

В принципе, session_is_registered лишен и ушел. Я переключился на проверке идентификатор сеанса:

if(isset($_SESSION['valid_user']))

Это не может быть самой безопасной адаптации, но он работал на моем сайте низкой безопасности.

+0

Я запускаю php 5.3 на всех трех серверах. Однако в отношении того, что вы предложили, я никогда не использовал функцию session_is_registered(); '. Я всегда увлекался тем, как вы делаете это сейчас, когда вы заходите на страницу авторизации. 'if (! Isset ($ _ SESSION ['logged_in'])) {// Возврат к логину} else {// Показать страницу}' Возможно, это не самый эффективный способ, но он делает то, что мне нужно. – SmurfTheSmurf

Смежные вопросы