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?
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().
acore Ekspert
19. november 2020 - 18:01 #2
Hvis du poster koden er det lettere
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>
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.
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?
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.
rwj Juniormester
20. november 2020 - 10:46 #7
Acore. 

Tak for råd og link.

God weekend.
acore Ekspert
20. november 2020 - 11:10 #8
I lige måde :)
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

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





Premium
Siger farvel til Proshop - her er topchef Ivan Jæger Christiansens nye job: "Det kan godt være, det er verdens mest åndssvage beslutning, men det føles virkelig godt"
Interview: Efter fire år som topchef i det fremadstormende Proshop har Ivan Jæger Christiansen meldt sin afgang. Nu tager han hul på drømmen som medejer i et nyt selskab. Se hans nye job.
Computerworld
Biden sender skjult besked til kode-folket: "Hvis du læser dette, har vi brug for din hjælp”
En stående invitation er blevet opdaget i kildekoden på Det Hvide Hus' hjemmeside. Men den er kun til de eksperter, der selv kan finde den.
CIO
Podcast: Hos Viking Life-Saving Equipment er it gået fra at være backend til at være noget, som kunderne spørger aktivt efter
Podcast, The Digital Edge: Viking leverer en stadig større del af deres produkt som en tjeneste. Som en del af tjenesten tager Viking ansvar for sikkerheden ved at levere, dokumentere og vedligeholde det nødvendige sikkerhedsudstyr. Hør hvordan Henrik Balslev senior digital director hos Viking har løftet den opgave.
White paper
Fri medarbejdermobilitet - med digital bodyguard
Om at gå fra adgangsstyring på personniveau til adgangsstyring på desktopniveau. I takt med at flere og flere medarbejdere arbejder remote og logger på jeres systemer og netværk uden for virksomhedens sikkerhedsværn, risikerer de at efterlade døren til forretningen på klem. Dermed bliver endpoints som pc’ere, Mac’s og servere et oplagt mål for hackere, som vil ind i virksomhedens infrastruktur. I blandt sker det også, at medarbejdere udnytter deres privilegerede adgangsrettigheder til skadelige formål. Det er derfor mere aktuelt end nogensinde at rette opmærksomheden mod jeres endpoints og de rettigheder, der ligger her.