0

そのためindex.php (root)、ユーザーがフォームを送信すると、ページの読み込み時に session_id が再生成され、非表示の入力に保存されます。

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 を取得し、それを再生成します。再生成後、データベースに送信します。

問題は、RELOADページにアクセスすると、ID が再生成されるように見えることです。regenerate_idこれを修正するにはどうすればよいですか?現在のブラウザ セッション中に何度更新しても、 .

4

1 に答える 1

0

ID が既に再生成されていることを示すフラグを新しいセッションに保存し、ページにアクセスするたびに確認します。

例えば:

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;
}

データベースを更新するためのコードをリロードごとに実行する必要がある場合は、if 条件を移動して、セッション ID 自体の再生成のみを囲むことができます。

于 2012-07-24T15:10:00.347 に答える