Это правильный способ восстановить сеанс данного пользователя? - PullRequest
1 голос
/ 17 ноября 2011

У меня есть функция следующим образом:

 $sid = mysql_real_escape_string( $_COOKIE['session_id'] );
if( $sid ) { session_id( $sid ); }

// Start session
if( !session_start() ) { die( 'Session could not be started.' ); }
$sid = session_id();

// Validate session id
 $user = $this->validateSessionId( $sid );

if( $user ) {
    if( !$user['uid'] ) {
        trigger_error( '`Services->__construct()` - Could not find user by session id \''.(string)$sid.'\'.',
                E_USER_ERROR );
    }

    $_SESSION['uid'] = $user['uid'];
    $_SESSION['user_name'] = $user['name'];
    $_SESSION['user_email'] = $user['email'];
    $_SESSION['user_created'] = $user['created'];
}

// If no valid session id, user is anonymous
else {
    $_SESSION['user_name'] = 'Anonymous';
    $_SESSION['user_created'] = time();
}

Когда пользователь впервые входит в систему, для него создается файл cookie с именем session_id с идентификатором их текущего сеанса.Этот идентификатор также добавляется в таблицу базы данных.Насколько я понимаю, сессия истекает как на клиенте, так и на сервере, но cookie и запись в базе данных могут быть установлены так долго, как мне бы хотелось.

validateSessionId проверяет таблицу сеансаидентификаторы в базе данных.Если сеанс найден и к нему в последний раз не обращались более 30 дней назад (если он был удален из таблицы), ассоциативный массив из списка пользователей представляет пользователя, связанного с этим идентификатором сеанса.Данные этого пользователя затем загружаются в текущий сеанс.

Правильно ли я понимаю, как это работает?

1 Ответ

1 голос
/ 17 ноября 2011

Целого session_id() бизнеса можно избежать.PHP автоматически проверит наличие cookie-файла сеанса при вызове session_start () и извлечет идентификатор сеанса в это время.Вы просто дублируете то, что уже сделано для вас.

Ваш код предполагает, что файл cookie, отправляемый PHP для отслеживания сеанса, фактически является постоянным файлом cookie.Обычно PHP отправляет только куки-файлы сессии (например, удалить, когда браузер закрыт).Таким образом, у пользователя не будет НИКАКОГО файла cookie сеанса, когда он вернется на сайт, и каждый раз будет получать новый сеанс.

...