Php登录系统突然停止工作

时间:2014-07-04 15:10:35

标签: php mysql session cookies

我为我正在处理的网站构建了一个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;
}
?>

2 个答案:

答案 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();

再次,只是在这里猜测你的问题。