2011-09-13 6 views
3

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

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

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

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

Благодаря Eds

ответ

1

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

$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» only.you может также добавьте больше значений в этот массив, который вы не хотите удалять позже ..

Спасибо.

0

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

$ lastPage = $ _SESSION ['last_page'] $ session_destroy(); , то создайте новый сеанс с $ lastPage в нем.

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

+1

Это также является хорошей идеей, как и все остальные. Возможно, я буду в будущем! Благодаря!! Eds – Eds

0

Возвращаясь к существующему решению обратной связи с использованием 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

На данный момент я пошел с другим ответом, но это хороший совет, спасибо! Eds – Eds

0

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

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

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

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

+0

Нет необходимости создавать ** $ _ SESSION ['user_info'] ** array..это бесполезно вообще. все переменные сеанса получат ** $ _ SESSION ** only..Thx – Chandresh

+0

IMO это более полезно, потому что вы можете отменить все, что вам нужно, только отменить одну переменную в ** $ _ SESSION ** вместо того, чтобы делать это один за другим – haynar

+0

Группировка переменных кажется разумным советом, спасибо! Eds – Eds

Смежные вопросы