Уничтожить сессию, но оставить один набор переменных - PullRequest
3 голосов
/ 13 сентября 2011

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

Я также использую переменную сеанса для запоминания последней посещенной страницы пользователя при обновлении.

Когда пользователь выходит из системы, я использую session_destroy (); удалить все переменные. Я хотел бы сохранить переменную последней посещенной страницы даже после того, как пользователь вышел из системы.

Думаю, я мог бы сделать это, используя функцию unset для любой другой переменной, но их много, и было интересно, есть ли более простой способ?

Спасибо Eds

Ответы [ 4 ]

1 голос
/ 13 сентября 2011

Вы можете попробовать ниже код для этого,

$Arr_not_destoy_session = array('last_visited_id');

        foreach($_SESSION as $sees_key => $sess_val ){
            if(!in_array($sees_key, $Arr_not_destoy_session)){
                unset($_SESSION[$sees_key]);    
            }   
        }

это приведет к сбросу всех переменных сеанса, кроме 'last_visited_id'. Вы также можете добавить дополнительные значения в этот массив, которые не хотите удалять позже ..

Спасибо.

0 голосов
/ 13 сентября 2011

Попробуйте сгруппировать переменные сеанса в массивы, и для их сброса вам просто нужно сбросить один или несколько массивов в $_SESSION. Например, если вы сохраняете информацию о пользователе в сеансе, попробуйте это:

$_SESSION['user_info'] = array(...);

$_SESSION['last_visited_page'] = '...';

После выхода из системы вы можете просто сбросить $_SESSION['user_info'] и сохранить $_SESSION['last_visited_page']

0 голосов
/ 13 сентября 2011

Возвращаясь к вашему существующему запасному решению использования unset(), вы говорите, что проблема в том, что их много, но это не должно усложнять; Я все еще думаю, что это хорошее решение вашей проблемы.

Во-первых, вы можете сбросить их все, используя цикл foreach(); для этого потребуется всего несколько строк кода:

foreach($_SESSION as $key=>$value) {
    if($key != "the_one_you_want_to_keep") {
         unset($_SESSION[$key]);
    }
}

Еще один способ сделать это - организовать данные сеанса в под-массивы, чтобы затем их можно было очистить, удалив единственную переменную массива верхнего уровня, но оставив другие данные сеанса в других подмассивах без изменений :

unset($_SESSION['user_data']);
//but don't unset $_SESSION['data_to_keep']

Надеюсь, это поможет.

0 голосов
/ 13 сентября 2011

Хорошо, вы можете уничтожить сеанс, но перед этим сохраните последнюю страницу в переменную, которую вы будете помещать в новую переменную сеанса.();затем создайте новый сеанс с $ lastPage в нем.

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

...