2012-04-17 2 views
0

Итак, у меня есть index.php (root), что пользователь отправляет форму, она регенерирует session_id при загрузке страницы и хранится в скрытом вводе.Постоянная текущая сессия Независимо от страницы Reload

При вводе данных в файле root index.php, они направляются к profile page, который имеет:

session_start(); // Bring in old sessionID 
$sess_id = session_id(); 

// If no sessionID redirect back home. 
if(empty($sess_id)) { 
    header('Location: ../index.php'); 
} 

// If don't enter, then reload page, redirect back home 
elseif(empty($_POST['firstNm']) || empty($_POST['lastNm'])) { 
    header('Location: ../index.php'); 
} 

// If sessionID first send off this data inputted from ../index.php then regenerate session id and update db 
else { 
    // Connect to db 
    $_SERVER['DOCUMENT_ROOT'] = 'SiteRoot/'; 
    // Grabs a new user's : username, pass, email from default [index.php] once submitted 
    require_once($_SERVER['DOCUMENT_ROOT'].'cfg/'.'dbi.php'); 
    require_once($_SERVER['DOCUMENT_ROOT'].'registration/'.'inituserCredentialsGrab.php'); 

    // After submitting original values, update new session ID in database since original was viewable via source hidden inputs 
    require_once($_SERVER['DOCUMENT_ROOT'].'registration/'.'newUserSessIDInitReg.php'); 
} 

Этот файл в основном получает все первоначальный вклад. Получает начальную session_id, которая видна при просмотре источника ... и восстанавливает ее. После регенерации он отправляется в db.

Проблема в том, что если я перехожу на страницу RELOAD, она, похоже, снова восстановит идентификатор. Как исправить это, так что независимо от того, сколько раз я обновляю во время текущего сеанса браузера, он не делает regenerate_id?

ответ

0

Я бы сохранил в своем новом сеансе флаг, что идентификатор уже был регенерирован и проверяет его при входе на страницу.

Например:

session_start(); // Bring in old sessionID    
$sess_id = session_id();    

// If no sessionID redirect back home.    
if(empty($sess_id)) {    
    header('Location: ../index.php');     
}    

// If don't enter, then reload page, redirect back home    
elseif(empty($_POST['firstNm']) || empty($_POST['lastNm'])) {    
    header('Location: ../index.php');     
}    

// If sessionID first send off this data inputted from ../index.php then regenerate session id and update db    
elseif(!isset($_SESSION['already_stored'])){     
    // Connect to db    
    $_SERVER['DOCUMENT_ROOT'] = 'SiteRoot/';    
    // Grabs a new user's : username, pass, email from default [index.php] once submitted    
    require_once($_SERVER['DOCUMENT_ROOT'].'cfg/'.'dbi.php');    
    require_once($_SERVER['DOCUMENT_ROOT'].'registration/'.'inituserCredentialsGrab.php');    

    // After submitting original values, update new session ID in database since original was viewable via source hidden inputs    
    require_once($_SERVER['DOCUMENT_ROOT'].'registration/'.'newUserSessIDInitReg.php'); 
    $_SESSION['already_stored'] = true; 
} 

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

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