Как определить факт "стартанутости" сессии ( isset ($_SESSION) не подходит )

Сергей123

Новичок
SiMM, извини, я чуть охладел уже к этому. Пока я считаю, что такая ф-ия нужна "прямо в php" (isset есть, function_exists есть, defined есть, ...), но, т.к. для её появления я ничем не пошевелил, - мне лучше просто заткнуться.

По поводу любых искусственных вариантов... Сейчас я за грубый @session_start(). К примеру, в твоём варианте ещё кода нужно дописывать, по-моему (лень проверять, но мне так кажется), т.к. "session_id() needs to be called before session_start() for that purpose."
 

ksnk

прохожий
Перечитыая документацию по [m]session_id[/m], наткнулся на пример
PHP:
if(session_id() == "")
{
start_session();
}
else
{
// Anything you want
}
Это не то, о чем так давно тут говорят ?
 

Сергей123

Новичок
ksnk, не то. Смотрите первый пост этого трэда.

-~{}~ 28.01.07 12:33:

Кстати, там (в доке) был когда-то и мой коммент по этому поводу, но его потёрли.
 

Solid

Drosera anglica
В IRC уже кто-то спрашивал... я привёл пример из доки:
PHP:
function start_session() {
   static $started = false;
   if (!$started){
       session_start();
       $started = true;
   }
}
Меня высмеяли. Вопрос: почему?
 

WP

^_^
Во-первых нет return, во-вторых нет совместимости с другими вызовами.
 

Solid

Drosera anglica
WP
А дописать одну строчку влом?
Или заменить во всех файлах с "session_start" на "start_session" тоже никак?

-~{}~ 29.01.07 02:54:

Хотя лично я вообще не понимаю, зачем в скрипте проверять на уже стартовавшую сессию. Лично для меня это уже абсолютная ошибка.
 

Solid

Drosera anglica
Frol
Гонишь. В начале я понял, что можно реализовать через static, потом полез в доку, стал искать по ключ. слову "started". Нашёл. Дал пример, а вы на меня как бешенные псы налетели и стали гавкать и доказывать, с пеной у рта, свою правоту.

-~{}~ 29.01.07 03:52:

PS. Из замечаний в документации к функции session_start.
 

SiMM

Новичок
> в твоём варианте ещё кода нужно дописывать, по-моему (лень проверять, но мне так кажется), т.к. "session_id() needs to be called before session_start() for that purpose."

А предыдущее предложение почему пропущено? ;)
If id is specified, it will replace the current session id.
 

SiMM

Новичок
> я имел ввиду, что надо ещё проверить, что будет, если делать безусловно session_id($sid), а сессия уже стартанула до вызова session_is_started()
Всё уже проверено :)
 

Gorynych

Посетитель PHP-Клуба
не осилил весь тред, так что если лишнее - прошу прощения.

так как лично я использую для работы с переменными сеанса класс-одиночку и статические методы, я вынужден был проверять факт старта сессии и запускать ее, если она еще не запущена. Честно говоря, до сих пор уверен, что вот такой проверки на существование значение идентификатора достаточно:
PHP:
                if ( !isset($_SESSION) && !session_id() ) {
                    session_start();
                }
--
P.S. до сих пор не могу постичь как можно обсуждать ситуации включенного register_globals в сочетании с статическими переменными и методами (на мой взгляд это вещи из разных эпох и стилей программирования), не говоря уже о потенциальной опасности этой настройки (в чем можно убедиться поинтересовавшись патчами большинства CMS).
 

texrdcom

Новичок
Да странно что не кто не послал на fag,
особенно тех кто за автострат сессий и так дальше.
совет автору - универсальных стредств нет, для web,
и создавать их - утопия, потому старайся создать расширяемое и гибкое решение,
на счет сессий могу посоветовать посомотреть как разработан класс
http://framework.zend.com/manual/ru/zend.session.html
его можно использовать в любых приложениях - и не построенных полностью на ZF
 

Gorynych

Посетитель PHP-Клуба
texrdcom
посмотрел на предлагаемый класс, остался в задумчивости от
PHP:
    static public function sessionExists()
    {
        if (ini_get('session.use_cookies') == '1' && isset($_COOKIE[session_name()])) {
            return true;
        } elseif (!empty($_REQUEST[session_name()])) {
            return true;
        }

        return false;
    }
во всяком случае при отсутствии после первого запуска сессии никакой куки или переменной в запросе не будет, но сессия уже будет запущена.
 

texrdcom

Новичок
Gorynych
Это проверка не старта сесси а наличия поулученного индефикатора от пользователя ! не путать!
Чтоб не розводить флуд читай http://phpfaq.ru/sessions
p/s
% 90 авторам данного топа тоже надо почитать данную ссылку,
даже если читали уже, так как наверное не поняли что такое сессии.....
 

Gorynych

Посетитель PHP-Клуба
texrdcom смешно. И что же у нас произойдет на первом проходе и первом запуске сессии в части проверки, что сессия стартовала? Ключевое слово "первый", т.е. повторного обращения/запроса к сайту еще не поступало.

Заодно подумайте (или угадайте?), почему в http://framework.zend.com/manual/ru/zend.session.advancedusage.html#zend.session.startingasession так настойчиво пишут не использовать автостарт или session_start? И как работает Zend_Session_Core::start() (может это Вам что-то подскажет).
 

SiMM

Новичок
> Это проверка не старта сесси а наличия поулученного индефикатора от пользователя !
Эта проверка выполняется за elseif. Код перед elseif - фуфло.
 
Сверху