php, сессии, вопрос

elenangel

могу ли я сохранить в сессии объект?
когда пишу так:

class TUser
{
var $login;
var $password;
function TUser($login,$password)
{
$this->login = $login;
$this->password = $password;
}

function Auth
{
//...
}
}

...

if($user->Auth == 1)
{
$content = "Регистрация прошла успешно. <br>\n";
$content .= "Вы вошли как ".$user->login."<br>";
$_SESSION['current_user']=$user;
}
else ...

...

if(session_is_registered('current_user'
{
$user = $_SESSION['current_user'];
$content = "Регистрация прошла успешно. <br>\n";
$content .= "Вы вошли как ".$user->login."<br>";

...

- оно не работает, выдает пустую строку вместо логина.

oleg1331

в сессии нельзя хранить объекты напрямую. используй сериализацию/ансериализацию.
Да, и совет. поставь в заголовок всех своих скриптов:
  
@ini_set('asp_tags','off');
@ini_set('short_open_tag', 'off');
@ini_set('register_globals',0);
@ini_set('display_errors',1);
@ini_set('date.timezone',"Europe/Moscow");
@ini_set('max_execution_time', 10);
@set_time_limit(10);

//@ini_set('memory_limit',"32M");
@error_reporting(E_ALL | E_NOTICE | E_WARNING | E_PARSE | E_ERROR | E_STRICT);

setlocale(LC_ALL,"ru_RU.UTF-8");
mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');
mb_language('uni');

(кодировка, соответственно, должна быть UTF-8). Если не ошибаюсь, тебе должны выдасться предупреждения, когда ты будешь пытаться запихнуть в сессию экземпляр класса.

sbs-66

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

elenangel

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

@ini_set('asp_tags','off');
@ini_set('short_open_tag', 'off');
@ini_set('register_globals',0);
@ini_set('display_errors',1);
@ini_set('date.timezone',"Europe/Moscow");
@ini_set('max_execution_time', 10);
@set_time_limit(10);

//@ini_set('memory_limit',"32M");
@error_reporting(E_ALL | E_NOTICE | E_WARNING | E_PARSE | E_ERROR | E_STRICT);


если я оставлю только эти строки, я так понимаю юникод будет необязателен?
просто в юникод неохота все переводить, я под виндою сижу и не уверен что PHP Expert Editor
юникод схавает. не в блокноте же кодить.

elenangel

кстати, а можно сериализовать в ассоциативный массив? он в сессии сохранится?

oleg1331

блокнот как раз точно не схавает:) да, будет работать.
строчки с mb_* устанавливали кодировку для функций типа mb_* для того, чтобы они корректно работали с многобайтовыми кодировками.
Если Вы их не используете - все будет в порядке.
А для разработки очень рекомендую Eclipse + PDT. Уже год в ней работаю, на мой взгляд - лучшая из вещей. Попробуйте

valodyr

спасибо, я уже тоже подумал про сериализацию, но очень влом делать, думал вдруг можно малой кровью
Что именно тебе здесь делать влом? [un]serialize($o)?

valodyr

Ресурсы (я имею в виду тип resource здесь) в пхп это просто числа (типа хендлов). Сохранить-то их скорее всего получится, но толку вне контекста сохранения не будет никакого от них.

elenangel

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

Commandor

че-то у меня сложилось стойкое впечатление, что ты чего-то недопонимаешь, придумываешь какие-то сериализации в ассоциативные массивы...
http://ru2.php.net/serialize

elenangel

внатуре недопонимаю. я думал имеется ввиду в принципе понятие преобразования в последовательную форму хранения - например в строку.
Оставить комментарий
Имя или ник:
Комментарий: