Avatar billede rwj Juniormester
19. november 2020 - 16:45 Der er 6 kommentarer og
2 løsninger

Session problemer ved login

Jeg er helt ny i PHP, har tidligere forsøgt med med ASP classis, dengang også med lidt hjælp herfra bla.

Jeg har hentet et loginsystem fra denne side:

https://speedysense.com/create-registration-login-system-php-mysql/

og jeg tester det på min side hos Simply.com 

Siden registration.php virker efter hensigten og gemmer indtastede informationer i db, herunder password som er ændret til specielkode.

Siden login.php giver denne fejlbesked: Warning: session_start() [function.session-start]: Cannot start session when headers already sent in login.php on line 11

som er:    session_start();

Er der nogen som har en letfordærvelig forklaring og løsning på problemet?
Avatar billede acore Ekspert
19. november 2020 - 17:59 #1
Det skyldes formentlig at du enten har blanke linier udenfor dine php tags eller at udskriver noget inden din session_start(). Der må ikke udskrives noget til siden inden session_start().
Avatar billede acore Ekspert
19. november 2020 - 18:01 #2
Hvis du poster koden er det lettere
Avatar billede rwj Juniormester
19. november 2020 - 23:29 #3
Acore.  Tak for svar

Jeg har tjekket for tomme og blanke linier, men her er den samlede kode bortset fra registration.php som virker ok:

auth_session.php

<?php
    session_start();
    if(!isset($_SESSION["username"])) {
        header("Location: login.php");
        exit();
    }
?>

index.php

<?php
header("Location: login.php");
?>

dashboard.php

<?php
//include auth_session.php file on all user panel pages
include("auth_session.php");
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Dashboard - Client area</title>
    <link rel="stylesheet" href="style.css" />
</head>
<body>
    <div class="form">
        <p>Hey, <?php echo $_SESSION['username']; ?>!</p>
        <p>You are in user dashboard page.</p>
        <p><a href="logout.php">Logout</a></p>
    </div>
</body>
</html>

login.php

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>Login</title>
    <link rel="stylesheet" href="style.css"/>
</head>
<body>
<?php
    require('db.php');
    session_start();
    // When form submitted, check and create user session.
    if (isset($_POST['username'])) {
        $username = stripslashes($_REQUEST['username']);    // removes backslashes
        $username = mysqli_real_escape_string($con, $username);
        $password = stripslashes($_REQUEST['password']);
        $password = mysqli_real_escape_string($con, $password);
        // Check user is exist in the database
        $query    = "SELECT * FROM `users` WHERE username='$username'
                    AND password='" . md5($password) . "'";
        $result = mysqli_query($con, $query) or die(mysql_error());
        $rows = mysqli_num_rows($result);
        if ($rows == 1) {
            $_SESSION['username'] = $username;
            // Redirect to user dashboard page
            header("Location: dashboard.php");
        } else {
            echo "<div class='form'>
                  <h3>Incorrect Username/password.</h3><br/>
                  <p class='link'>Click here to <a href='login.php'>Login</a> again.</p>
                  </div>";
        }
    } else {
?>
    <form class="form" method="post" name="login">
        <h1 class="login-title">Login</h1>
        <input type="text" class="login-input" name="username" placeholder="Username" autofocus="true"/>
        <input type="password" class="login-input" name="password" placeholder="Password"/>
        <input type="submit" value="Login" name="submit" class="login-button"/>
        <p class="link">Don't have an account? <a href="registration.php">Registration Now</a></p>
  </form>
<?php
    }
?>
</body>
</html>
Avatar billede acore Ekspert
20. november 2020 - 06:27 #4
Dine HTML tags i login.php - dvs alle linier før <php? skal flyttes ned efter session_start(). De linier er jo html og ryger direkte afsted.
Avatar billede rwj Juniormester
20. november 2020 - 09:29 #5
Acore.

Jeg har fulgt dit råd, og det var kun login.php der skulle have ændret  koden.

Herefter var det tilsyneladende muligt at login, men nu kom fejlbesked:

Warning: Cannot modify header information - headers already sent by login.php on line 30

som er denne linie:

header("Location: dashboard.php");

som jeg herefter udskiftede med denne:

echo "<script>location.href='dashboard.php';</script>";

og nu blev jeg budt velkommen på dashboard.php.

Er min løsning ok, og endelig, da jeg forsøgte mig i classic asp, brugte jeg denne kode, når haveforeningens folk login til vores private sider:

<%
If Session("login") <> True then
Response.Redirect ("index.asp")
End if
%>           

findes der noget tilsvarende i php?
Avatar billede acore Ekspert
20. november 2020 - 09:40 #6
Se https://www.php.net/manual/en/function.header.php for redirect i php. Der omtales også dit problem.

En anden løsning til

header("Location: dashboard.php");

problemet er, også at flytte din html ned under den. Der må ikke udskrives hverken html, linieskift eller blanke inden redirect.
Avatar billede rwj Juniormester
20. november 2020 - 10:46 #7
Acore. 

Tak for råd og link.

God weekend.
Avatar billede acore Ekspert
20. november 2020 - 11:10 #8
I lige måde :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester