我断断续续地处理这个问题已有一段时间了,但我只是让它一再发生,以致于真的很难解决它。这种情况在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变量的(如果这是实际发生的事情),如果我输入一个假的电子邮件地址,它为什么要填充$_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类集。
谢谢
发布于 2014-01-24 10:22:52
请试试这段代码
$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__);
}https://stackoverflow.com/questions/20199624
复制相似问题