在PHP中更新会话变量

时间:2014-05-19 13:19:09

标签: php forms session session-variables

我正在创建一个基本的个人资料页面,用于检查用户是否已登录,如果不是,则会创建一个快速的电子邮件/密码表单,一旦他们再次提交表单流程但设置了Session变量和向用户显示一个简单的问候语,确认它有效。

我遇到的问题是它无法正常工作,只返回表单而不是登录页面。我无法看到这出错的地方以及为什么它不会接受新的会话变量。我试图破坏当前的会话(不应该存在)并开启一个新会议......我不知所措。

这是我的代码:

// session started at the top of the document

if (isset($_SESSION['userid']) && $_SESSION['userid'] != '') {
$name = $_SESSION['fname'];
$loggedin = TRUE;
}else{
$loggedin = FALSE;

// if the form is submitted then process the form and create session variables
if (isset($_POST['submit'])) {
    $email = sanitizestring($_POST['email']);
    $pword = sanitizestring($_POST['pword']);

    if (isset($email) && $email !='') {
        if(isset($pword) && $pword !=''){

// connect to database and check credentials against whats stored - all works fine
        { 
            // If password matches then we direct them to their profile
            $_SESSION['userid'] = $user['id_login'];
            $_SESSION['fname'] = $user['name_login'];
        }else{
            $error = "email and password did not match";
        }// end check password
    }else{
        $error = 'You have not entered your password';
    }
}else{
    $error = 'You have not provided an email';
} //end if email is set
}// end if submitted

}// end if Session is set

if ($loggedin != TRUE) {

?>
<div id="login">
<form action="#" method="Post">
    <table>
        <tr>
            <td><label for"email">Email</label></td>
            <td><label for="pword">Password</label></td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td><input type="email" name="email"></td>
            <td><input type="password" name="pword"></td>
            <td><input type="submit" name="submit" value="Login"></td>
        </tr>
    </table>
</form>
/// display $error messages here
<?php
}

}else{
echo "hello ".$name;
}// end if user is logged in

session_destroy();

?>

我已经搞砸了这里的代码,移动提交代码试图确保它正确运行但我无法看到这出错的地方。

目标是,如果用户未登录,则会在提交表单时提示他们返回到个人资料页面。

非常感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:0)

您确认您的会话确实在运行吗?只需做一个小测试页面:

<?php
echo $_SESSION["test"];
$_SESSION["test"] = date("Y-m-d H:i:s");

您可能还需要执行session_start(),具体取决于您的PHP配置。

如果多次调用,这应显示您之前调用该页面的日期时间。


此外,您的代码显示您在代码中将正常未解析的HTML与PHP代码混合在一起。确保在执行任何输出之前完成对会话数据的所有更改。 PHP无法在任何输出后存储您的会话数据。


另外,不要破坏你的会话。这当然会杀死任何会话数据。只需删除此行即可。如果要注销并希望清除任何存储的会话数据,则只需执行此操作。

答案 1 :(得分:0)

我认为您需要在验证用户时生成$loggedin == TRUE。喜欢After the line

$_SESSION['userid'] = $user['id_login'];
$_SESSION['fname'] = $user['name_login'];

添加以下行:

$loggedin == TRUE;

所以块看起来像:

 if(isset($pword) && $pword !=''){

  // connect to database and check credentials against whats stored - all works fine
    { 
        // If password matches then we direct them to their profile
        $_SESSION['userid'] = $user['id_login'];
        $_SESSION['fname'] = $user['name_login'];
        $loggedin == true;
    }else{
    ........(Rest of the code)