PHP 登录问题 - 发布版本


Php login issue - post version

所以我在 php 中登录时遇到了问题,我的意思是它可以工作,但是当我重新加载时它说:

您要查找的页面使用了您输入的信息。返回到该页面可能会导致重复执行任何操作。

所以我真的不知道该怎么办,这是代码,如果还有其他问题,请帮助我改进它。

附言。我必须使用漩涡,因为 im 使用的游戏脚本密码是用 C++ 制作的,密码是用漩涡进行哈希处理的,因为这是最好的哈希插件,有 atm,提前感谢。

PS 我是 2 天前开始的 php 新手,这就是我所做的:

    <?php
error_reporting(E_ALL);
session_start();

$db = "localhost";
$user = "root";
$password = "";
$base = "samp";
$konekt = mysqli_connect($db, $user, $password, $base);
if (!$konekt) {
    echo "Konekcija sa bazom nije uspela" . mysqli_connect_error();
}
if(isset($_SESSION["name"]) && $_SESSION["name"] )
{
    echo "Vec ste ulogovani, ".$_SESSION["name"]." <br>Automatski vas odjavljujemo.";
    unset( $_SESSION );
    session_destroy();
    exit;
}   
$UserPrijavljen = false;
$userName = isset($_POST["name"]) ? $_POST["name"] : null;
$userPass = isset($_POST["pass"]) ? $_POST["pass"] : null;
if($userName && $userPass)
{
    $hashedPass = hash('whirlpool', $userPass);
    $query = "SELECT Ime FROM Igraci WHERE Ime = '$userName' AND Lozinka = '$hashedPass'";
    $result = mysqli_query( $konekt, $query);
    $row = mysqli_fetch_array($result);
    if($row)
    {
        $UserPrijavljen = true;     
    }
    elseif (!$row) {
        echo "Podatci koje ste uneli nisu ispravni, sesija unistena.";
    }
}
if ( !$UserPrijavljen )
{
    echo "
            <form action='index.php' method='post'>
                Korisnicko Ime: <input type='text' name='name' value='$userName'><br>
                Lozinka: <input type='password' name='pass' value='$userPass'><br>
                <input type='submit' value='log in'>
            </form>
        ";
}
else
{
    echo "<div>";
    echo "Prijavljeni ste kao $userName!";
    echo "</div>";
    $_SESSION["name"] = $userName;
}
?>

当我重新加载页面时,有没有办法它不会破坏会话并将我注销,只是为了保持登录状态,这就是部分

    if(isset($_SESSION["name"]) && $_SESSION["name"] )
{
    echo "Vec ste ulogovani, ".$_SESSION["name"]." <br>Automatski vas odjavljujemo.";
    unset( $_SESSION );
    session_destroy();
    exit;
}   

这段代码会给你一些开端:把它放在同一个页面上,它应该可以工作。您必须向数据库添加会话字段以跟踪记录的用户。

# logout code
if($_GET['logout']) {
setcookie("login", '',time()-86400); # delete cookie
exit(); # stop executing here
}

# keep user logged in here (add a session field to your database)
if($_COOKIE["login"] && mb_strlen($_COOKIE["login"]) == '32') {
# revalidate cookie (you could use memcached here)
$session = $konekt->real_escape_string($_COOKIE["login"]);
$query = "SELECT Ime FROM Igraci WHERE session = '$session' LIMIT 1";
$result = mysqli_query( $konekt, $query); $row = mysqli_fetch_array($result);
# message
if($row['Ime']) { 
echo "User is already logged in with username ".$row['Ime']. " and hash: ".$_COOKIE["login"]. '<a href="index.php?logout=1">logout</a>?';
exit(); # don't run the next code below
}

# default login form
echo <<<EOF
<form action='index.php' method='post'>
Korisnicko Ime: <input type='text' name='name' value=''><br>
Lozinka: <input type='password' name='pass' value=''><br>
<input type='submit' value='log in'>
</form>
EOF;

if($_POST['name'] && $_POST['pass']) {
$hashedPass = $konekt->real_escape_string(hash('whirlpool', $_POST['pass']));
$userName = $konekt->real_escape_string($userName);
$query = "SELECT Ime FROM Igraci WHERE Ime = '$userName' AND Lozinka = '$hashedPass' LIMIT 1";
$result = mysqli_query( $konekt, $query); $row = mysqli_fetch_array($result);
if($row) { 
$session = md5($userName.$hashedPass); # user unique identifier
mysqli_query($konekt, "UPDATE Igraci SET session = '$session' WHERE Ime = '$userName' AND Lozinka = '$hashedPass'"); # save to db
setcookie("login", $session,time()+3600); # stay logged in for 1 hour with a unique identifier
echo "You are now logged in with hash: ".$_COOKIE["login"]. '<a href="index.php?logout=1">logout</a>?';
} else {
echo "Podatci koje ste uneli nisu ispravni, sesija unistena."; # wrong pass?
}
}