php会话没有保存在Hostgator服务器上

时间:2014-11-10 22:58:14

标签: php session cookies login session-cookies

我是PHP的新手。我的登录页面有问题。当我在本地服务器(localhost)上运行代码时,一切正常。但由于我在hostgator上传代码,我无法登录我的帐户。  我猜它与hostgator服务器的会话问题。

这是我想在hosgator上运行的代码

  <?php
    session_start();
    require_once("functions.php");
    require_once("db-const.php");
        if (logged_in() == true) {
        redirect_to("home.php");
    }
?>
<html>
<head>
    <title>Login</title>
    <link rel="shortcut icon" href="images/WST.png" type="image/x-icon" />
    <link rel="stylesheet" type="text/css" href="css/login.css" />
    <span><img src="images/WST LOGO.png" width="290" height="115"></span>

</head>
<body>
<div class="login">
<h1><font size=5px; color="#030724";>Lo</font><font size=5px; color="#ffd700";>g</font><font size=5px; color="#d10b0b";>in</font></h1>

<!-- The HTML login form -->
    <form action="<?=$_SERVER['PHP_SELF']?>" method="post">

        <input type="text" name="username" class="textbox" placeholder="Email" /> &nbsp;
        <input type="password" name="password" class="textbox" placeholder="Password" /> &nbsp;
        <input type="submit" name="submit" value="Login" /><br />
        <input type="checkbox" name="remember" />Keep me logged in<br/><br/>
        <a href="forgot.php">Forgot Password?</a>&nbsp; |
        &nbsp; <a href="register.php">Sign Up</a>

    </form>
<?php
if (isset($_POST['submit'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];

    // processing remember me option and setting cookie with long expiry date
    if (isset($_POST['remember'])) {    
        session_set_cookie_params('604800'); //one week (value in seconds)
        session_regenerate_id(true);
    } 

    $encrypt_password=md5($password);
    $sql = "SELECT * from users WHERE username ='{$username}' AND password ='{$encrypt_password}' LIMIT 1";
    $result = $mysqli->query($sql);

    if ($result->num_rows != 1) {
        echo "<p><font color='red';>Invalid username or password!</font></p>";
    } else {
        // Authenticated, set session variables
        $user = $result->fetch_array();
        $_SESSION['user_id'] = $user['id'];
        $_SESSION['username'] = $user['username'];

        // update status to online
        $timestamp = time();
        $sql = "UPDATE users SET status={$timestamp} WHERE id={$_SESSION['user_id']}";
        $result = $mysqli->query($sql);

        redirect_to("home.php?id={$_SESSION['user_id']}");
        // do stuffs
    }
}

if(isset($_GET['msg'])) {
    echo "<p style='color:red;'>".$_GET['msg']."</p>";
}
?>  
</div>
</body>
</html>
请某人帮助我。

提前感谢:)

1 个答案:

答案 0 :(得分:1)

这里有很多问题。我希望这不应该是一个生产应用程序或背后有任何安全的东西。

最初你使用的是LIKE。 LIKE允许模式,所以如果有人输入了用户名%,它就会匹配每一个用户名,所以你基本上只进行密码检查,这只是因为你在密码上使用了md5。

$username = $_POST['username'];
$sql = "SELECT * from users WHERE username ='$username' password ='$encrypt_password' LIMIT 1";

此代码允许SQL注入攻击,该攻击可能允许黑客操纵或破坏您的数据库。查找准备好的语句并使用它们。切勿在标准查询中使用用户输入(POST / GET / COOKIE)。

WHERE username ='$username' password ='$encrypt_password'

您在用户名和密码之间缺少AND。

如果您正在使用它来学习,那么很好,如果您正在尝试在生产中运行某些东西,您需要雇用某人来帮助您纠正/保护您的代码。

确保显示所有错误可能会有所帮助,请将此代码添加到PHP的顶部:

  ini_set("display_errors", "1");
  error_reporting(E_ALL);