Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2011, 11:15   #1
Horus92
Форумчанин
 
Аватар для Horus92
 
Регистрация: 04.05.2009
Сообщений: 147
По умолчанию Массив $_SESSION разные хостинги

У меня на сайте в массиве $_SESSION['member'] хранится serialize($massiv)
$massiv -это массив с информацией пользовтеля.
Когда тестирую сайт на локальной машине то все хорошо на протяжении сессии весь массив существует но когда заливаю на внешний хостинг то значения $_SESSION['member'] храняться только на странице заполнения(тоесть страница в которой я заполняю массив) а после перехода на другую страницу в $_SESSION['member'] он пуст.

Проверял несколько раз на сайте и локалке одна копия сайта на локалке все отлично на сайте не пашет.Понимаю что скорее всего ошибка в настройке php но хотелось бы узнать что это такое и можно ли это исправить?
Horus92 вне форума Ответить с цитированием
Старый 26.01.2011, 12:29   #2
nec117
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 266
По умолчанию

Приведите код страницы заполнения массива и добавления в сессию где не пропадает массив. И код любой страницы где он пропадает.
nec117 вне форума Ответить с цитированием
Старый 26.01.2011, 18:20   #3
Horus92
Форумчанин
 
Аватар для Horus92
 
Регистрация: 04.05.2009
Сообщений: 147
По умолчанию

Заполняется
PHP код:
@session_start();
if  (isset(
$_GET['do'])){
$do=$_GET['do'];
}
if  (
$do=='logout') {
unset (
$_SESSION['user_id']);
unset(
$_COOKIE['login']);
unset(
$_COOKIE['password']);
session_destroy();
session_unset();
$_SESSION['logged']=FALSE;
$_SESSION['info']='Вы вышли из системы';
       
header('Location:'.$config['url'].'/index.php?do=info');
} else {
if (isset(
$_POST['login']) && isset($_POST['password']))
{
$login=$_POST['login'];
$password md5($_POST['password']);
$tmpmember $db->super_query"SELECT * FROM " dataprefix "users where username='{$_POST['login']}' and password='" md5$_POST['password'] ) . "'" );

if (
$tmpmember['id'])
{
$salt=$tmpmember['salt'];
 
$_SESSION['user_id'] =$tmpmember['username'];
setCookie("login"$logintime() + 3600);
$pass=md5(md5($password) . $salt);
setCookie("password"$passtime() + 3600);
$_SESSION['logged']=TRUE;
$_SESSION['member_id']=serialize($tmpmember);
        
header('Location:'.$config['url'].'/index.php');
        }
    else {
        
$_SESSION['logged']=FALSE;
       
$_SESSION['info']='Неправильный логин или пароль';
       
header('Location:'.$config['url'].'/index.php?do=info');
    }
}

Вот записывается
Код:
$_SESSION['member_id']=serialize($tmpmember);
Используется
PHP код:
require_once ENGINE_DIR '/class/template.php';
require_once 
ENGINE_DIR '/config/db.php';
require_once 
ENGINE_DIR '/config/conf.php';
require_once 
ENGINE_DIR '/class/func.php';
require_once 
ENGINE_DIR '/class/mysql.php';
$tpl = new templater ( );
$db = new db();
$tpl->dir ROOT_DIR '/tpl/'.$config['tplchose'].'';
@
session_start();
$metatags = array (
                
'title' => $config['home_title'],
                
'description' => $config['description'],
                
'keywords' => $config['keywords'],
                
'charset' => $config['charset'] );
#############################USER_LOGIN###########################
if (isset($_SESSION['user_id'])) {
$user=$_SESSION['user_id'];
$_SESSION['logged']=TRUE;
 
$cont=file_get_contents($tpl->dir DIRECTORY_SEPARATOR 'login_pan.tpl');
   
$member_id=unserialize($_SESSION['member_id']);
   
$cont=str_replace('{PROFILE}'$config[url].'/index.php?do=profile&sub='.$member_id['username'].''$cont);
   
$cont=str_replace('{PM}'$member_id['foto'], $cont);
$tpl->set('{login}',$cont);
$tmp=$tpl->result['{login}'];
$tmp=str_replace('{user}',$user,$tmp);
$tpl->result['{login}']=$tmp;
}else
{
    if (isset(
$_COOKIE['login']) && isset($_COOKIE['password'])) {
        
$db->query("SELECT * FROM `users` WHERE `username`='{$login}' AND `password`='{$password}'  LIMIT 1");
        
$row=$db->get_row();
        if (
$row)
        {
             
$salt $row['salt'];
             if (
$_COOKIE['login']==$row['username'])
             {
 
$passalt md5(md5($row['password']) . $salt);
 
$passw=md5(md5($_COOKIE['password']) . $salt);
 if (
$passalt==$passw)
 {
     
$_SESSION['user_id']=$row['username'];
     
$_SESSION['logged']=TRUE;
 }

             }
 }

    } else
{
$tpl->set('{login}','login.tpl');
$_SESSION['logged']=FALSE;
}


вот используется
Код:
$member_id=unserialize($_SESSION['member_id']);
и тут она уже пуста.
Horus92 вне форума Ответить с цитированием
Старый 26.01.2011, 19:31   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Включите вывод ошибок в браузер.
Уберите всех собак(@) перед session_start() - это тупиковая привычка.
Старт сессии должен осуществляться в самом начале документа,до любого вывода в браузер - во втором скрипте у вас на новом хостинге может некорректно отрабатывать один из подключаемых скриптов,выдавая что-либо в браузер - по этой причине сессия может не стартовать.
Если старт не удался - смотрите причину в выведенной ошибке.

PS: вообще ваш код местами презабавный...
Andkorol вне форума Ответить с цитированием
Старый 26.01.2011, 21:10   #5
Horus92
Форумчанин
 
Аватар для Horus92
 
Регистрация: 04.05.2009
Сообщений: 147
По умолчанию

Цитата:
PS: вообще ваш код местами презабавный...
Скорее всего так как это первый мой код на php. Пишу на диплом CMS.
До этого работал в основном с Delphi и с++ в основном WinAPI.

Убрал все @.
При выводе всех ошибок вот какие пишет
Цитата:
Warning: unserialize() expects parameter 1 to be string, array given in /home/p16933/www/scms.pp.ua/index.php on line 17

Последний раз редактировалось Horus92; 26.01.2011 в 21:19.
Horus92 вне форума Ответить с цитированием
Старый 26.01.2011, 21:29   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Horus92 Посмотреть сообщение
При выводе всех ошибок вот какие пишет
Цитата:
Warning: unserialize() expects parameter 1 to be string, array given in /home/p16933/www/scms.pp.ua/index.php on line 17
Это значит,что функция unserialize() ожидает параметр-строку, а получает массив вместо строки.
Andkorol вне форума Ответить с цитированием
Старый 26.01.2011, 21:35   #7
Horus92
Форумчанин
 
Аватар для Horus92
 
Регистрация: 04.05.2009
Сообщений: 147
По умолчанию

Сделал без serialize заработало. спасибо + поставил
Horus92 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разные пароли на разные диапазоны zenner Microsoft Office Excel 22 27.11.2010 01:25
Разные компиляторы - разные результаты Кипящий чайник Общие вопросы C/C++ 3 16.07.2010 14:54
Бесплатные хостинги Chudo4258 PHP 2 27.05.2009 20:24
Массив $_SESSION пуст Elm0 PHP 2 22.11.2008 15:30