В какой момент доступны данные сеанса? - PullRequest
3 голосов
/ 28 апреля 2011

У меня есть следующее, открывающее сессию (php),

session_start() ;

foreach($_SESSION as $key => $value){
    $alert .= '<br/>' . '['.$key.']='.$value ;
}

$alert .= '<br/>$_SERVER[MY_SERVER...]='.$_SERVER['MY_SERVER_GENERATED'] ;

if($_SESSION['MY_SERVER_GENERATED'] !== true ||
    $_SERVER['REMOTE_ADDR'] !== $_SESSION['PREV_REMOTEADDR'] ||
    $_SERVER['HTTP_USER_AGENT'] !== $_SESSION['PREV_USERAGENT']){
        $alert .= 'session destroyed' ;
        session_destroy() ;
}

if(isset($_SESSION['CREATED']) && (strtotime('now') - $_SESSION['CREATED']) > 300){//Delete expired sessions - seconds
    $alert .= '<div class="error_box">Your session has expired!</div>' ;
    $_SESSION = array() ;
}

session_regenerate_id();
$_SESSION['CREATED'] = strtotime('now') ;
$_SESSION['MY_SERVER_GENERATED'] = true ;
$_SESSION['PREV_USERAGENT'] = $_SERVER['HTTP_USER_AGENT'] ;
$_SESSION['PREV_REMOTEADDR'] = $_SERVER['REMOTE_ADDR'] ;

echo $alert ;

Проблема в том, что сеанс уничтожается каждый раз. $ _SESSION просто пуст. В какой момент можно запускать проверки, как указано выше?

Упс забыл указать, что я проверил, что сеанс содержит данные, но только после запуска страницы. Таким образом, сеанс уничтожается, потому что все данные $ _SESSION равны нулю, и поэтому условия оцениваются как ложные. Например, $ alert не регистрируется как что-либо, хранящееся в нем.

1 Ответ

1 голос
/ 28 апреля 2011

Ваш код, кажется, уловил 22:

session_start() ;


if(!$_SESSION['MY_SERVER_GENERATED']){ <------- this will always be true 
                                                for a fresh session, so
    session_destroy() ;  <--------------------- this will always be executed

ваши данные сеанса никогда не имеют шансов заполнить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...