私のカスタムsession_start()
は、ページ間で現在のセッションを再開するのではなく、新しいセッションを作成しているようです。メソッドは次のとおりです。
public function sec_session_start()
{
$session_name = 'sec_session_id'; //set a custom session name
$secure = false; //set to true if using https
$httponly = true; //This stops javascript being able to access the session id
ini_set('session.use_only_cookies', 1); // Forces sessions to only use cookies
$cookieParams = session_get_cookie_params(); //Gets currtent cookies params
session_set_cookie_params($cookieParams["lifetime"], $cookieParams["domain"], $secure, $httponly);
session_name($session_name); //Sets the session name to the one set above
session_start(); //Start the php session
session_regenerate_id(true); //regernates the session, delete the old one
}
私が遭遇している問題は、スーパーグローバル変数 $_SESSION に関するものです。たとえば、私のログイン ページでは、CSRF
攻撃を防ぐためにランダムなトークンを生成します。
$token = md5(uniqid(mt_rand(), true));
$_SESSION['token'] = $token; //Add randomly generated token to superglobal variable
...
<input type="hidden" name="siteToken" value="$token" />
php
次に、処理ページで正しいトークン値をテストします。
//Check Token Values (prevent CSRF attacks)
if($passedToken != $_SESSION['token']) {
$error = "CSRF attack detected. Please close your browser and try again.";
$signIn->csrfAttackLog($username);
echo $error;
exit();
}
問題は私のphp
処理ページで発生します:Notice: Undefined index: token in...
明らかに、私のセッション変数は引き継がれませんでした。処理ページで別のセッションを開始sec_session_start()
したので、セッションの続行を怠ったわけではありません。まったく新しいセッションが開始されたようです。最初のページを値でテストしまし"printing"
た$_SESSION
。
どんな入力でも大歓迎です。
編集:$passedToken
正しいです。$_POST
値をこの変数に等しくする中間ステップがあります。