Flow:
User fills a form with an email and gets a passcode.
I generate and store this passcode (checksum_code) in the session using session()->set(...).
Then I redirect() the user to a verification page.
On that page, I match the submitted OTP with the value from the session.
Issue : Even though I can see the session is set correctly in the GET request after redirect, when I submit the POST request to verify, the comparison fails and I always get an "Invalid passcode" error - even when the entered code is correct. Plus outside the if condition i do get the sessions but when the if condition passes the session displays null when i tried to print using dd().
Route
$routes->match(['get', 'post'], '/account/verify-registration', [UserAuthenticationController::class, 'verifyRegistration'], ['as' => 'verify-registration.user']); Form
<form action="<?= route_to('verify-registration.user') ?>" method="POST" novalidate> <?= csrf_field() ?> // code... </form> Function for redirecting towards verification -
private function handleUnregisteredEmail($email) { $post = $this->request->getPost(); if ($this->checksum->check('front-login-email', $post['checksum_code'])) { $user_otp = strtolower($this->checksum->randomText(6)); $this->userModel->insert([ 'user_email_id' => $email, 'user_verify_code' => $user_otp ]); session()->set([ 'verify_user_id' => $this->userModel->insertID(), 'verify_user_email_id' => $email, 'checksum_code' => $post['checksum_code'] ]); $this->checksum->mark('front-login-email', $post['checksum_code']); session()->close(); return redirect()->to(route_to('verify-registration.user')); } $this->validator->setError('failed', 'Something went wrong, Please try again.'); return redirect()->back()->withInput()->with('validation', $this->validator); } Function for verification -
public function verifyRegistration() { if ($this->request->getMethod() === 'POST') { dd(session()->get()); // print // code... } else if($this->request->getMethod() === 'GET') {..} } What I've Checked:
- I confirmed that ci_session is present in cookies with status 303.
- Session files are also being created in writable > session.
- Outside "if" condition stored sessions are visible when i tried to get them using session()->get(), but inside if condition, when i used dd() it prints this -
session()->get() array (1) __ci_last_regenerate => integer 1753439916 2025-07-25T10:38:36+00:00 ↧Called from .../app/Controllers/User/AuthenticationController.php:33 [dd()] .../CodeIgniter.php:933 [App\Controllers\User\AuthenticationController->verifyRegistration()] .../CodeIgniter.php:507 [CodeIgniter\CodeIgniter->runController()] .../CodeIgniter.php:354 [CodeIgniter\CodeIgniter->handleRequest()] .../Boot.php:334 [CodeIgniter\CodeIgniter->run()] .../Boot.php:67 [CodeIgniter\Boot::runCodeIgniter()] <ROOT>/index.php:59 [CodeIgniter\Boot::bootWeb()] .../rewrite.php:44 I don't know what to do, i didn't even destroyed any session anywhere....