所以我在 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?
}
}