Как я могу управлять временем жизни моих сессий PHP?

Я довольно новичок в PHP, поэтому я работаю над простым проектом на практике. Однако мне не удается заставить управление сессиями работать должным образом.

Я хочу, чтобы при закрытии браузера данные (текущая страница, на которой находится пользователь) сохранялись в течение часа. Если пользователь возвращается в течение часа, он должен увидеть ту же страницу, которую он покинул, а если он вернется через час, он должен увидеть первый вопрос.

Когда на все вопросы будут даны ответы, он должен увидеть экран оценки с кнопкой «Повторить попытку», которая предпочтительно уничтожает / убивает / удаляет сеанс и запускает новый, направляя пользователя к первому вопросу.

Если я пропущу строку 3-8, мой код работает должным образом, я перебираю вопросы до тех пор, пока не застряну на экране счета с неработающей кнопкой «Повторить попытку», я могу вернуться к первому вопросу, только закрыв и снова открыть браузер.

С этими строками страница проходит через вопросы нормально, но когда я перезагружаю браузер, она начинается с первого вопроса. Когда я закрываю браузер, ничего не делая, и открываю страницу во второй раз, я нахожу страницу, которую я оставил сначала. Я снова закрываю и открываю браузер и снова нахожу нужную страницу, делаю это снова и возвращаюсь к вопросу 0. Независимо от того, как часто я перезагружаю браузер, я остаюсь на вопросе 0.

Когда я просматриваю файлы cookie в моем браузере, у меня все время остается один и тот же файл cookie, который был запущен 14 декабря 2015 года 18:48:45. Тем не менее, время истечения также не является правильным, так как это 26 ноября 2061 13:37:29 вместо часа спустя. Что я делаю неправильно?

Вот мой код:

<?php
/* Sart (new) session*/
if (isset($_GET['TryAgain'])){
session_start();
$_SESSION = array();
session_destroy();
}
session_set_cookie_params(time()+3600);
session_start();
/*-------------------------------------------------------------------*/

/* IMPORT DATABASE: $qs[i]=question text, $as[i]=array(choices per question),
$as[i][i]=array('t'=>choice text, 'c'=>BOOLEAN) */
require_once('config.php');
$dbh = new PDO("mysql:dbname=$db;host=$host", $user, $password);
$questions = $dbh->prepare('select * from questions');
$questions->execute();
$choices = $dbh->prepare('select * from choices');
$choices->execute();
$qs = array();
$as = array();

foreach($questions as $row) {
$i = $row['q_nr'];
$qs[$i] = $row['q_text'];
}

foreach($choices as $row) {
$qi = $row['q_nr'];
$ci = $row['c_nr'];
$as[$qi][$ci] = array('t'=>$row['c_text'],'c'=>$row['correct']);
}
/*-------------------------------------------------------------------*/
/*INITIALIZE SESSION VARIABLES*/

/* Creates counter-variable if not set -------- (ini value is 0)*/
if(!isset($_SESSION['counter'])) {
$_SESSION['counter'] = 0;
}

/* Creates score-variable if not set -------- (ini value is 0)*/
if(!isset($_SESSION['score'])) {
$_SESSION['score'] = 0;
}
/*-------------------------------------------------------------------*/
/* SET COUNTER, SCORE AND DONE*/

/* Check if answer previous question has been submitted*/
if (isset($_GET['a'])) {
$submitted = true;
} else {
$submitted = false;
}

/* Set counter*/
if ($submitted){
$_SESSION['counter'] += 1;
}
$cqi = $_SESSION['counter'];

/* Set score*/
if ($submitted) {
if ($as[$cqi-1][$_GET['a']]['c']){
$_SESSION['score'] += 1;
}
}
$score = $_SESSION['score'];

/* Check done*/
if($cqi >= count($qs)){
$done = true;
} else {
$done = false;
}

echo 'cqi: '.$cqi;
echo 'done: '.$done;
/*-------------------------------------------------------------------*/
?>

<!-- START HTML!!! -->

<html>
<head>

</head>
<body>
<br><br>
<?php
if($done){
echo 'You finished the quiz. <br> Your score is: '.$score;
echo "<form action='index.php' method='get'>";
echo "<input type='hidden' name='TryAgain' value=true>";
echo "<input type='submit' value='Try again!'>";
echo "</form>";
} else {
echo $qs[$cqi];
echo "<form action='index.php' method='get'>";
$cci = 0;
foreach($as[$cqi] as $cc){
echo "<input type='radio' name='a' value=".$cci.">".
$cc['t']."<br>";
$cci++;
}
echo "<input type='submit' value='Next question'>";
echo "</form>";
echo "<br><br>Current score: ".$score;
}
?>
</body>
</html>

Пожалуйста, помогите мне, я действительно застрял с этим.

-Редактировать-

Я попытался снова пропустить строку 3-8 и сохранить session_set_cookie_params(600);, чтобы проверить эту функцию как можно проще. Я проверил это так же, как и выше, снова и снова открывая мой браузер и отмечая, какой вопрос я получил (q. 0 или 1). Я получил, казалось бы, случайный паттерн из первого вопроса 0 и вопроса, на котором я должен быть, 1, в котором 0 часто является наиболее распространенным. Я совершенно уверен, что это случайно, так как я удалил cookie и повторил тест несколько раз, и каждый раз, когда я видел новый шаблон. Печенье делает истекает сейчас в нужное время, хотя.

Я также попробовал ini_set('session.cookie_lifetime', 600); вместо session_set_cookie_params(600); функция, как предложено в другом вопросе, но у меня все еще были случайные результаты. И я не думаю, что для меня будет хорошей идеей попытаться создать систему входа в систему, если я даже не смогу сделать это правильно …

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]