首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是一个陈旧的会话停止提交的post变量。

是一个陈旧的会话停止提交的post变量。
EN

Stack Overflow用户
提问于 2013-11-25 17:38:48
回答 1查看 244关注 0票数 0

我断断续续地处理这个问题已有一段时间了,但我只是让它一再发生,以致于真的很难解决它。这种情况在FF中屡屡发生,但我也在Chrome中看到过。

我有如下登录表格,它很简单,电子邮件地址和密码和提交按钮。

代码语言:javascript
复制
    <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变量的(如果这是实际发生的事情),如果我输入一个假的电子邮件地址,它为什么要填充$_POST数组?我所做的print_r($_POST)是脚本中的第一件事,在任何其他处理或包含之前,但它仍然是空的?

我想我并不知道浏览器是如何处理会话cookie的,但是这种行为让我完全一无所知。

关于如何排除此问题的任何建议,或常规会话通知。

编辑- login.php的PHP代码

代码语言:javascript
复制
<?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类集。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2014-01-24 10:22:52

请试试这段代码

代码语言:javascript
复制
$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__);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20199624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档