Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запрет перегрузки страницы, можно ли запретить перегружать страницу  
V
    Опции темы
godvinn
Дата 25.5.2009, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 4.4.2008
Где: possibility of mo ving to Kyiv

Репутация: нет
Всего: 1



Можно ли запретить пользователю перегружать определенную страницу *?


--------------------
Everything happens in life.
user posted image
PM MAIL   Вверх
bars80080
Дата 25.5.2009, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



контроль над ctrl+f5? имхо, нет. всёё равно ведь сможет закрыть и зайти заново

помятуя о предыдущем вопросе с тестом, могу предположить, что это продолжение. однозначным решением здесь будет авторизация и контроль, может по ip
PM MAIL WWW   Вверх
godvinn
Дата 25.5.2009, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 4.4.2008
Где: possibility of mo ving to Kyiv

Репутация: нет
Всего: 1



bars80080,  да это все тот же вопрос по тестированию smile

извиняюсь за флуд, но у меня вопрос по поводу того что вы говорили мне вчера, что нужно в сессию записать начальное время и потом сравнить его с конечным. 

с чего придумался вопрос...

вот как я делаю с предложениями с сессией:
есть у меня в базе вопросы я подсчитываю количество вопросов и вывожу общее время на данный тест:
 
Код

..запрос с базе
$arr_count = $row_count[0];
if ($arr_count != 0)
{
            return 60000 * $arr_count;
}


допустим у меня в базе 4 вопроса я для них вывел что нужно 240000(мил.с)

потом передаю эту сумму в скрипт по которому определяться если пользователь не вкладывается во время то автоматически отправляются на сервер данные, но тут стало несколько критических вопросов
1. Если отключен JavaScript
2. Если пользователь перегружает страницу то время начинается сначала 

переделал с сессиями, но если я записываю в сессию  
начальное время то есть 
Код

$time_server = time();
$time_ = $time_limit + $time_server;
..будет время текущее + прибавлено время которое отводиться на тест  


в конце теста проверяю время окончания и время $time_


но тут тоже проблемка функция time() возращает постоянно новое время и в сессии будет постоянно меняться значение при обновлении страницы, 

вот после этого всего возник такой глупый вопрос.

или может можно как то сделать чтобы записывалось значение $time_  только раз не реагируя на обновление страницы?


--------------------
Everything happens in life.
user posted image
PM MAIL   Вверх
Aliance
Дата 25.5.2009, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



Что мешает сделать так:
Код

if ( сессия не установлена )
{
    сессия[начало теста] = текущее время();
}


А вообще, задавать этот вопрос стоит в соответствующем форуме, а не здесь.

Модератор: Пожалуйста, один топик - один вопрос.


PM MAIL WWW ICQ Skype   Вверх
bars80080
Дата 25.5.2009, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



много не понятного, я б сделал так

некая страница: вы хотите пройти тест? и кнопка далее на страницу с тестом

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

стартуем сессию:
Код

// проверка в БД, не тестировался ли сей пользователь ранее
// и далее, либо отфутболивание его с ошибкой, либо тест
session_start();
$_SESSION['TIME'] = time();

echo 'вопросы теста...

вам даётся 6 минут';


далее у пользователя просто выводятся часы на javascript, показывающие сколько у него осталось времени

на странице форма, в которой пользователь заполняет ответы, по нажатию кнопки отправить - форма отправляется скрипту-обработчику
если же время выходит, то форма принудительно по таймеру отправляется обработчику
и даже если время выходит, а javascript отключён и не может отправить форму, но через некоторое время пользователь отправляет форму обработчику - ничего страшного

скрипт-обработчик:
Код

session_start();
$flag = false;
if(!empty($_SESSION['TIME'])) {
    $time = time();
    $dif = $_SESSION['TIME'] - $time;
    if($dif < 240) {
        $flag = true;
        // обработка результатов теста
    }
}
if(!$flag) { echo 'нарушение правил, ваш тест не защитан'; }
else { echo 'ваши результаты такие-то'; }

// запись в БД факт о прохождении теста, успешность и результаты
// для обычного пользователя можно записать хотя бы ip. 
// для зарегестрированного пользователя (допустим, это система для студентов, 
// все они изначально должны получить на каждого одну личную учётную запись) просто id пользователя
вот и всё
PM MAIL WWW   Вверх
Aliance
Дата 25.5.2009, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



bars80080, в твоей модели пользователь не отправив теста может нажать обновить и у него выставится новое время. А это не правильно, поэтому нужно делать как написал я, постом выше - если сесия не установлена, устанавливаем. Таким образом она установится только 1 раз.
PM MAIL WWW ICQ Skype   Вверх
bars80080
Дата 25.5.2009, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



что верно, то верно
PM MAIL WWW   Вверх
godvinn
Дата 26.5.2009, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 4.4.2008
Где: possibility of mo ving to Kyiv

Репутация: нет
Всего: 1



Aliance, 
Код

if ( сессия не установлена )
{
    сессия[начало теста] = текущее время();
}



да этот код создаст только одну копию времени, но тут несколько есть погрешностей ну это на мое мнение потому что у меня немного не такая ситуация 

тест у меня привязывается конкретно до id лекции, у меня не просто тест один у меня их много 

то есть пользователь кликает на линк "тест" Попадает на страницу там по твоему примеру кода создается только одна копия (чтобы при обновлении не было погрешности времени) и тут вся загвоздка в том, что когда пользователь нажмет кнопку назад, и перейдет к другой лекции копия сессии остается прежней то есть нужно ее как то удалять но как ? То есть копия времени в памяти висит. 

может как то можно привязаться к id - лекции 
id тоже храним в сессии и проверять на его создание  и на наличие времени в сессии 

if (если нет в памяти таких данных )
{
       сессия[начало теста] = текущее время();
}

вообщем на этом я запутался * помогите разобраться 


Извините если тема не соответствует содержимому, если можно то перенесите ее в пхп раздел, спасибо за понимание.


Это сообщение отредактировал(а) godvinn - 26.5.2009, 00:14


--------------------
Everything happens in life.
user posted image
PM MAIL   Вверх
bars80080
Дата 26.5.2009, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



нет-нет, слишком надумано. на каждом этапе мы сохраняем в сессии номер этапа, и когда человек откатывается назад, то он просто получит ошибку или тот же кусок, с которого пытался откатиться. если выполнить всё в одном скрипте, разбитом на этапы условиями, то вообще везде будет грузиться одна и та же страница, отсылкой разных пост-переменных

в общем, много теории, когда надо просто сделать, а потом уже смотреть, что не получается и где


сессия удаляется просто session_destroy()
PM MAIL WWW   Вверх
Aliance
Дата 26.5.2009, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



Что мешает хранить в сессии массив, где ключом будет ID лекции?
PM MAIL WWW ICQ Skype   Вверх
godvinn
Дата 26.5.2009, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 4.4.2008
Где: possibility of mo ving to Kyiv

Репутация: нет
Всего: 1



bars80080, 
и когда человек откатывается назад, то он просто получит ошибку или тот же кусок

для  того чтобы пользователь получил уже созданный кусок я реализовал а вот как сделать чтобы ему выводилась ошибка при попытке откатиться *?


чтобы пока он не сдаст тест он был на этой странице. А перед прохождением просто написать предупреждение что тест доступно сдавать только один раз.

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

Это сообщение отредактировал(а) godvinn - 26.5.2009, 09:26


--------------------
Everything happens in life.
user posted image
PM MAIL   Вверх
bars80080
Дата 26.5.2009, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



Цитата(godvinn @  26.5.2009,  09:20 Найти цитируемый пост)
а вот как сделать чтобы ему выводилась ошибка при попытке откатиться *?


Цитата(bars80080 @  26.5.2009,  00:35 Найти цитируемый пост)
если выполнить всё в одном скрипте, разбитом на этапы условиями, то вообще везде будет грузиться одна и та же страница

разница будет только в полученных пост-данных
PM MAIL WWW   Вверх
godvinn
Дата 26.5.2009, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 4.4.2008
Где: possibility of mo ving to Kyiv

Репутация: нет
Всего: 1



разница будет только в полученных пост-данных 
то есть *? 


--------------------
Everything happens in life.
user posted image
PM MAIL   Вверх
bars80080
Дата 26.5.2009, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



ну смотри
некий этап теста на странице script.php: <form action="script.php" method="post">
или вообще без action

этот адрес в форме всегда будет один и тот же, значит браузер будет воспринимать страницу как одну и ту же, просто к ним будут уходить данные формы

при обработке данных в скрипте для того чтобы избежать повторной отправки данных при нажатии кнопки "назад" в браузере, надо сделать перезагрузку:

Код

session_start();

if(empty($_SESSION['step'])) {
    echo 'форма с первым вопросом <form action="http://server.ru/script.php" method="post">...';
    $_SESSION['step'] = 1;
}
elseif($_SESSION['step'] == 1) { 
    // обработка данных первого вопроса
    $_SESSION['step'] = 2;
    header('Location: http://server.ru/script.php'); exit;
}
elseif($_SESSION['step'] == 2) { 
    echo 'форма со вторым вопросом <form action="http://server.ru/script.php" method="post">...';
    $_SESSION['step'] = 3;
}
elseif($_SESSION['step'] == 3) { 
    // обработка данных второго вопроса
    $_SESSION['step'] = 4;
    header('Location: http://server.ru/script.php'); exit;
}
elseif($_SESSION['step'] == 4) { 
    echo 'форма со третьим вопросом <form action="http://server.ru/script.php" method="post">...';
    $_SESSION['step'] = 5;
}
// и так далее

в итоге страница всегда одна, "назад" будет ссылаться на неё же и будет грузить только текущий этап. селектор этапов $_SESSION['step'], как видишь никоим образом клиенту не отправляется, а следовательно подделан быть не может
PM MAIL WWW   Вверх
Aliance
Дата 26.5.2009, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



bars80080, а если пользователь закроет браузер?

Кроме того, если не ошибаюсь, внутренние редиректы должны содержать относительные пути
PM MAIL WWW ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0569 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.