2010-09-22 2 views
1

В моей локальной машине и интернет-сервер, я иметь 'тест' папку и три файла в нем (one.php,two.php,three.php) .сессия не работает

one.php
<?php 
ob_start(); 
session_start(); 
$_SESSION['one'] = 1; 
header('Location:two.php'); 
exit(); 
?> 

two.php
<?php 
ob_start(); 
session_start(); 
$_SESSION['two'] = 2; 
header('Location:three.php'); 
exit(); 
?> 

three.php
<?php 
ob_start(); 
session_start(); 
echo '<pre>';print_r($_SESSION); 
?> 

в то время как я беру one.php в браузере я получаю выход

// Локальная машина

array[one] =1 
array[two] =2 

это правильно

// Интернет-сервер

array[one] =1 

это неправильное

Что в этом плохого? i donot получение предупреждения,

Кто-нибудь, пожалуйста, сообщите мне, в чем проблема?

ответ

3

У меня есть причина для этой проблемы.

Это было связано с session.save_path из php.ini файла.

Убедитесь, что каталог путей сохранения сеанса настроен в php.ini, существует и доступен для записи.

1

попробуйте вызвать session_write_close(); перед отправкой заголовка.

+0

Без изменений, получение одинакового результата –

+0

hmmm ... попробуйте добавить error_reporting (E_ALL); в верхней части ваших скриптов и посмотреть, что это говорит вам что-нибудь. – Kris

+0

Не отображается предупреждение, я думаю, что в настройках сервера это так –

2

Вы всегда должны добавлять * session_start(); * в первую строку своего кода. В php 5.2.11 есть проблема, исправленная с версией 5.2.17.

Этот код не работает:

<?php 
    session_start(); 
?> 

Этот код работает отлично:

<?php session_start();?> 

Так что если вы проверить версию PHP хоста и версия 5.2.11 или ранее, что один, это может быть проблемой!

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