Похоже, что мой пользовательский 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
к этой переменной.