1

私のカスタム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値をこの変数に等しくする中間ステップがあります。

4

2 に答える 2