我有一个非常基本的登录系统,我在我的本地主机上测试过,以及我用来测试我的项目的免费托管网站,一切正常。
我刚刚将网站作为子域名移至Site Ground,并且登录已停止工作。该站点仍在从我在此位置创建的数据库中加载内容,因此我知道问题不是因为无法连接到数据库。
.htaccess文件中没有任何内容阻止用户登录,如果将其移动到新服务器是一个问题,我该如何找到解决方法呢?尝试登录时页面不会返回任何错误
登录PHP:
<?php
require 'includes/connect.php';
session_start();
if(isset($_POST['login'])){
$username = $_POST['username'];
$password = md5 ($_POST['password']);
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT COUNT(user_id) FROM nathan WHERE username='$username' AND password='$password'";
$q = $pdo->prepare($sql);
$q->execute();
$count = $q->fetchColumn();
if($count == 1){
$_SESSION['username'] = $username;
header('Location: admin.php');
}
}
?>
数据库连接:
<?php
class Database
{
private static $dbName = "some_DB" ;
private static $dbHost = "localhost" ;
private static $username = "some_user";
private static $password = "password123";
private static $cont = null;
public function __construct() {
die('Init function is not allowed');
}
public static function connect()
{
// One connection through whole application
if ( null == self::$cont )
{
try
{
self::$cont = new PDO( "mysql:host=".self::$dbHost.";"."dbname=".self::$dbName, self::$username, self::$password);
}
catch(PDOException $e)
{
die($e->getMessage());
}
}
return self::$cont;
}
public static function disconnect()
{
self::$cont = null;
}
}
?>
会话PHP:
<?php
session_start();
if (!isset($_SESSION['username'])){
header('Location: login.php');
};
?>
答案 0 :(得分:1)
您可能希望在查看时检查Cookie,并确认您确实收到了包含会话信息的Cookie。如果这不起作用,我对您的环境的有限观点表明您不允许来自该特定子域的cookie。
要检查的另一件事是存储会话数据的目录。如果没有填充,那么您将无法继续会话。
答案 1 :(得分:0)
正如我上面的海报所说肯定是因为cookies,请参阅这篇文章了解解决方案documentation
你不应该直接在数据库中存储密码,这是不安全的,你应该用password_hash()散列它,然后在登录时将它与hash_equals()进行比较。