过时的会话是否会阻止提交的变量

时间:2013-11-25 17:38:49

标签: php html forms session cookies

我已经间歇性地讨论了这个问题已经有一段时间了,但我只是反复发生这种问题,实际上很难拍摄它。它在FF中反复出现,但我也在Chrome中看过它。

我的登录表格如下,非常简单,电子邮件地址和密码以及提交按钮

    <form method="post" action="login.php" id="valid" class="mainForm">
        <fieldset>
            <div class="">
                <label for="req1">Email:</label>
                <div class="loginInput"><input style="width: 100%;" type="text" name="email" class="validate" id="req1" /></div>
                <div class="fix"></div>
            </div>

            <div class="">
                <label for="req2">Password:</label>
                <div class="loginInput"><input style="width: 100%;" type="password" name="password" class="validate" id="req2" /></div>
                <div class="fix"></div>
            </div>

            <input name="action" type="hidden" value="log_in" />

            <div class="">
                <div class=""><input type="checkbox" id="check2" name="remember_me" value="1"/><label>Remember me</label></div>
                <input type="submit" value="Log me in" class="submitForm" />
                <div class="fix"></div>
            </div>
        </fieldset>
    </form>

提交上述表单不会让我登录,它只是再次显示登录表单,就像没有提交任何内容一样。所以我修改了提交到的login.php文件,并在最顶部添加了print_r($_POST);

当我再次提交表单时,显示的只是一个空数组。就像表格变量没有被发送一样。我尝试了几个帐户,每次都有一个空白数组。

然后我尝试输入一个我不在数据库中的新电子邮件地址,令我惊讶的是填充了假电子邮件和密码的$ _POST数组。然后我再次尝试了一个真实帐户,它是空白的。

我做的最后一件事是在FF中删除该网站的会话cookie,然后再试一次。令我惊讶的是,我可以登录确定。之后我几次登录和退出都没有问题!

所以我的问题是:那个会话cookie正在做什么来防止发送变量(如果那是实际发生的)以及为什么在我输入一个假电子邮件地址时填充$ _POST数组? print_r($_POST)我做的是脚本中的第一件事,在进行任何其他处理或包含之前,它仍然是空的?

我想我真的不知道浏览器如何处理会话cookie,但这种行为让我完全无能为力。

有关如何解决此问题或一般会话建议的任何建议。

编辑 - login.php的PHP代码

<?php
print_r($_POST);
include '../inc/init.php';

$action = fRequest::get('action');

if ('log_out' == $action) {

    fSession::destroy();
    fAuthorization::destroyUserInfo();
    fMessaging::create('success', '<center>You were successfully logged out</center>');

}

if (fAuthorization::checkAuthLevel('user') || fAuthorization::checkAuthLevel('buser')) {
    fURL::redirect('index.php');
}


if ('log_in' == $action) {
    # Set session variables etc...
}

顶部的init.php包括数据库连接字符串并启动会话等...我正在使用包含会话类的FlourishLib Un-Framework类。

由于

1 个答案:

答案 0 :(得分:0)

请尝试此代码

$actions = array('log_in', 'log_out');
$action = fRequest::getValid('action', $actions);
if ($action == 'log_out') {
fSession::clear();
fAuthorization::destroyUserInfo();
fMessaging::create('success', URL_ROOT . 'index.php', 'You were successfully logged   out');
fURL::redirect(URL_ROOT . 'index.php');
}
if ($action == 'log_in') {
if (fRequest::isPost()) {
    try {
        $valid_login = fRequest::get('username') == 'yourlogin';
        $valid_pass = md5(fRequest::get('password')) == 'md5(youpassword)'; 
        if (!$valid_login || !$valid_pass) {
            throw new fValidationException('The login or password entered is invalid');
        }
        fAuthorization::setUserToken(fRequest::get('username'));
        fURL::redirect(fAuthorization::getRequestedURL(TRUE, URL_ROOT . 'index.php'));
    } catch (fExpectedException $e) {
        fMessaging::create('error', fURL::get(), $e->getMessage());
    }
}
include VIEWS_DIR . DS . basename(__FILE__);
}