PHP会话变量不接受重新分配

时间:2014-02-14 03:59:35

标签: php mysql session wamp

我正在使用PHP注册系统,但遇到了问题。用户按预期插入数据库。接下来,一个令牌(只是一个随机值的哈希)与用户ID一起附加到一个URL,这个URL通过电子邮件发送到用户的电子邮件,以便他们验证它。

例如,用户128拥有此验证网址:localhost/fPASS/?page=verify_email&id=128&token=4a629a13871cf6d354984abdfd990783

请注意,网址中的用户ID被正确标记为128.如果我访问该链接,脚本会正确地将ID和令牌与数据库进行比较,并将email_verified更改为1。

问题是,如果我尝试注册另一个用户,则使用用户128的id和令牌重新生成url而不是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');
}

但重新分配似乎没有生效。什么可能导致原始作业在会话变量中“卡住”?

2 个答案:

答案 0 :(得分:1)

请检查您的php中是否包含 session_start(); 。然后,在重定向之前尝试回显会话变量或赋值变量 * *。这将有助于您轻松调试。

答案 1 :(得分:0)

session_start();需要包含在您打算使用会话的每个页面上。

使用此代码查看每个页面加载时当前存储在会话中的内容:

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

注意: sesison_start();需要在任何标题之前设置,因此最好将其放在页面顶部。