Показать сообщение отдельно
  #3 (permalink)  
Старый 20.12.2016, 11:19
Профессор
Отправить личное сообщение для DDim1000 Посмотреть профиль Найти все сообщения от DDim1000
 
Регистрация: 20.10.2016
Сообщений: 223

Сообщение от laimas Посмотреть сообщение
Еще раз: если механизм сессий работает (сервер стартует сессию, а у клиента включены куки), то браузер сам передает id сессии серверу, таким образом "привязывая" клиента к его сессии. То есть вот это

<?php echo session_name()?>=<?php echo session_id()?>

полная хня, навороченная кем-то не понять для чего. Если сессия умерла, то еще не факт, что по этим генам ее можно воскресить, то есть что она хранила будет утеряно. Значит стартовать новую и для всего. Чей код каптчи используется, свой или же чужой?

Вот это new Date().getTime() для того, что подставляя новое случайное значение в url, заставлять браузер обращаться к серверу, а не к кешу. Если src каптчи, это только код формирующий ее, то важен просто факт обращения к этому скрипту, а session_start() этого скрипта будет продолжать сессию, id которой передает браузер. И вполне достаточно сначала

<img id="captcha" src="./reg/?<?=time()?>">

и обновления:

$('#reloadcaptcha').click(function() {
        var img = $('#captcha')[0];
        img.src = img.src.replace(/\d+/, new Date().getTime())
})


session_start() скрипта обрабатывающего прием формы также продолжает сессию, id которой передает браузер, в которой и хранится код коптчи, который в нее пишет скрипт ее формирующий.

unset($_SESSION['captcha_keystring']); - удаление кода каптчи из сессии должно происходить только после того, как пользователь ввел его правильно.

У вас же где-то все запутано, либо также бездумно где-то unset(), потому и не работает.

Я сделал по другому.. Но, как сделать так, чтоб данные не отправлялись, если код введен не верно?

Сейчас выводится true, если код верный, и false - если вводишь не верный код.

<form method="post" id="form_reg" action="#">
<p>Enter text shown below:</p>
<p><img id="captcha" src="./reg/?<?php echo session_name()?>=<?php echo session_id()?>"></p>
<p id="reloadcaptcha">Показать другой код</p>
<p><input type="text" name="keystring" id="keystring"><?php
if(count($_POST)>0){
	if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] === $_POST['keystring']){
		echo "true";
	}else{
		echo "false";
	}
}
unset($_SESSION['captcha_keystring']);
?>
</p>
<p><input type="submit" value="Check"></p>
</form>

Последний раз редактировалось DDim1000, 20.12.2016 в 11:23.
Ответить с цитированием