我为我正在处理的网站构建了一个PHP / MySql登录系统,一切正常。我花了一个月的时间来处理它,昨晚把它拉了起来,突然间它无法正常工作。它识别是否输入了错误的用户名或密码,但如果输入正确的信息,则会再次将您重定向到登录页面。某些地方是否有一些我不知道的更新?我没有更改任何文件中的任何内容。它在一个月前完美地工作,并且完全没有变化它现在不起作用。有什么想法吗?
更新
如果我检查记住我的方框,它会工作,但如果我没有,我会在下面粘贴我的代码:
登录脚本:
<?php
define('INCLUDE_CHECK',true);
require 'connect.php';
require 'functions.php';
session_name('TheLoginSession');
session_start();
// ---------- LOGIN ----------
if($_POST['submit']=='Login')
{
// Checking whether the Login form has been submitted
$err = array();
// Will hold our errors
if(!$_POST['username'] || !$_POST['password'])
$err[] = 'All the fields must be filled in!';
if(!count($err))
{
$_POST['username'] = mysql_real_escape_string($_POST['username']);
$_POST['password'] = mysql_real_escape_string($_POST['password']);
$_POST['remembercheck'] = (int)$_POST['remembercheck'];
$storedsaltquery = mysql_fetch_assoc(mysql_query("SELECT rand FROM members WHERE usr = '".$_POST['username']."'"));
$storedsalt = $storedsaltquery['rand'];
// Escaping all input data
$row = mysql_fetch_assoc(mysql_query("SELECT id,compid,usr,firstName,level,yn FROM members WHERE usr='{$_POST['usernamelog']}' AND pass='".hash("sha256",$_POST['passwordlog'].$storedsalt)."'"));
if($row['id'])
{
// If everything is OK login
$_SESSION['usr']=$row['usr'];
$_SESSION['comp']=$row['compid'];
$_SESSION['id'] = $row['id'];
$_SESSION['name'] = $row['firstName'];
$_SESSION['usrlevel'] = $row['level'];
$_SESSION['new'] = $row['yn'];
$_SESSION['remembercheck'] = $_POST['remembercheck'];
// Store some data in the session
setcookie('Remember','remembercheck',time()+1209600,'/','.domain.com');
}
else $err[]='Wrong username and/or password!';
}
if($err)
$_SESSION['msg']['login-err'] = implode('<br />',$err);
// Save the error messages in the session
echo header("Location: ../index.php");
exit;
}
索引页:
<?php
define('INCLUDE_CHECK',true);
require 'includes/connect.php';
require 'includes/functions.php';
// Those two files can be included only if INCLUDE_CHECK is defined
session_name('TheLoginSession');
// Starting the session
session_start();
if($_SESSION['id'] && !isset($_COOKIE['Remember']) && !$_SESSION['remembercheck'])
{
// If you are logged in, but you don't have the Remember cookie (browser restart)
// and you have not checked the remembercheck checkbox:
$_SESSION = array();
session_destroy();
// Destroy the session
}
if(isset($_GET['logoff']))
{
$_SESSION = array();
session_destroy();
header("Location: index.php");
exit;
}
if($_SESSION['id'] && $_SESSION['new'] != 1){
header("Location: home.php");
exit;
}
?>
答案 0 :(得分:0)
如果没有任何改变,怎么会有更新?
您使用的是CMS还是框架?
如果它是你自己的所有代码,并且你没有改变任何东西,那么什么都不会更新。
答案 1 :(得分:0)
我之前遇到过这样的问题,但没有更多信息,很难知道是否是同一个问题。我有你描述的症状(使用不良信用登录并获得身份验证错误,以良好的信誉登录并重定向回登录)。
我的原因是未能包含删除旧会话cookie的代码。登录尝试&#39;工作&#39;但是旧的cookie也会读取并尝试进行身份验证,失败(因为它太旧了),并将用户踢回登录状态。
如果这是您的问题,请清除您的网站Cookie,看看您是否可以登录。
如果可行,您将要在注销和陈旧会话处理中添加一些清理代码。例如,要注销:
// per http://www.php.net/manual/en/function.session-destroy.php
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
session_destroy();
再次,只是在这里猜测你的问题。