2014-02-14 59 views
0

我正在使用PHP註冊系統,並且遇到問題。用戶按預期插入到數據庫中。接下來,一個標記(只是一個隨機值的散列)被附加到一個URL以及用戶標識,並且這個URL通過電子郵件發送給用戶的電子郵件,以便他們可以驗證它。PHP會話變量不接受重新調整

例如用戶128擁有此驗證網址:localhost/fPASS/?page=verify_email&id=128&token=4a629a13871cf6d354984abdfd990783

注意在URL中的用戶ID。如果我訪問鏈接是否正確爲128指出,該腳本比較正確的ID和數據庫,並改變令牌email_verified設置爲1.

問題是,如果我嘗試註冊另一個用戶,那麼URL會重新生成用戶128的ID和令牌,而不是129 ...除非我清除我的Cookie。現在url使用會話變量來確定id和token,所以看起來他們沒有正確更新。註冊功能,但是,總是重新分配中的變量,如果沒有錯誤(其中有沒有):

// if there are no errors, redirect to success page 
if (!isset($errors)) 
{ 
    // send the email address on to the next page in case the verification email needs to be re-sent 
    $_SESSION['email'] = $safe['email']; 
    $_SESSION['account_id'] = $account_id; 
    $_SESSION['token'] = $token; 
    header('Location: http://localhost/fPASS/?page=reg_success'); 
} 

的調動似乎並不雖然要發生作用。什麼可能導致原始任務在會話變量中「卡住」?

+0

電子郵件是否會更新? – wribit

+1

您是否嘗試在分配會話變量之前清除會話變量? session_unset()?什麼? – wribit

回答

1

請檢查您是否包含session_start();在你的PHP。然後,在重定向 *之前嘗試回顯您的會話變量或分配變量 * 。這將幫助您輕鬆進行調試。

+0

我確實有session_start(),但我會按照建議嘗試調試。 – Razick

0

session_start();需要包含在您打算使用會話的每個頁面上。

使用此代碼來查看什麼是目前存儲在會話的每個頁面加載:

<?php 
session_start(); 
var_dump($_SESSION); 
?> 

注:sesison_start();需要任何頭前設置,因此,最好的做法有它的頁面頂部。