Еще раз: если механизм сессий работает (сервер стартует сессию, а у клиента включены куки), то браузер сам передает 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(), потому и не работает.