Avatar billede soundclaes Nybegynder
28. marts 2004 - 16:47 Der er 15 kommentarer og
1 løsning

Session-variabler bliver ikke sendt imellem dokumenter. Tror jeg.

Hejsa.

Jeg har lavet et login der checker brugernavn og password i en MySQL-database.

Det hele virkede fint, på den server jeg udviklede det på (med PHP 4.1.2), men nu har jeg rykket det over på den server, hvorpå siden skal ligge, og her virker det ikke (den kører med 4.3.1).

Login-infomationerne bliver sendt til scriptet checklogin.php igennem  en form. I dette script checkes informationerne og hvis de matcher i databasen sendes brugeren videre til "admin/index.php".

Mine scripts er som følger:

"Checklogin.php"

<?php
session_start();
if (!$password || !$username){
    header("Location:index.php?check=fail");
    exit;
}
$username = trim($username);
$password = trim($password);
$username = strtolower($username);
$password = strtolower($password);

include 'admin/db_pass.php';

$sql="SELECT * FROM min_tabel WHERE user = '$username'";
$result=mysql_query("$sql");

while ($data=mysql_fetch_array($result)){
            $id= $data[0];
            $user=  $data[1];
            $pass= $data[2];
            }

if ($password!=$pass){
    header("Location:index.php?check=fail");
    exit;
}else{
    $_SESSION['status']=1;
    header("Location:admin/index.php");
        exit;
}
?>

Hvis de indtastede informationer er korrekte, sendes brugeren over til index-siden, der har dette script liggende i toppen.

"Index.php"

<?php
session_start();
header("Cache-control: private"); // IE 6 tilbage-knap fix.

if ($_SESSION['status']!=1){
    header("Location:login_please.php");
        exit;
}
?>

Problemet er, at når man indtaster de korrekte oplysninger, bliver man sendt til siden login_please.php.

Skal jeg hente $_SESSION variablerne med noget $_GET eller lignende? Hvad gør jeg forkert?

Jeg fatter ikke, hvorfor det virker på den ene server, og ikke på den anden.

Tusinde tak for hjælpen på forhånd.

- Claes
Avatar billede detox Nybegynder
28. marts 2004 - 17:06 #1
Jeg tror nærmere det handler om at register_globals er slået fra, så du skal hente dine $_GET og $_POST variabler i de rette array's. Fx:

if (!$_POST['password'] || !$_POST['username']){
    header("Location:index.php?check=fail");
    exit;
}
$username = trim($_POST['username']);
$password = trim($_POST['password']);
osv....
Avatar billede detox Nybegynder
28. marts 2004 - 17:07 #2
Bedre er nok:

if (!isset($_POST['password']) || !isset($_POST['username'])){
    header("Location:index.php?check=fail");
    exit;
}
$username = trim($_POST['username']);
$password = trim($_POST['password']);
osv....
Avatar billede soundclaes Nybegynder
28. marts 2004 - 17:13 #3
Takker.
Men jeg kiggede lige på info.php, på den server siden skal ligge på, og der står, at register_globals er "on". Så er det vel ikke der, fejlen ligger?
Og desuden bliver jeg jo sendt til siden "login_please.php", så den checker $username og $password variablerne korrekt.
Avatar billede detox Nybegynder
28. marts 2004 - 17:19 #4
Jeg vil nu anbefale dig at programmere som register_globals = Off. Så vil koeden nemlig osse virke den dag de skifter til Off.
Denne del:

$sql="SELECT * FROM min_tabel WHERE user = '$username'";
$result=mysql_query("$sql");

while ($data=mysql_fetch_array($result)){
            $id= $data[0];
            $user=  $data[1];
            $pass= $data[2];
            }

if ($password!=$pass){
    header("Location:index.php?check=fail");
    exit;
}else{
    $_SESSION['status']=1;
    header("Location:admin/index.php");
        exit;
}

kunne du ændre til:

$sql="SELECT * FROM min_tabel WHERE user = '$username' AND pass = '$pass'";
$result=mysql_query("$sql");

if (mysql_num_rows($result) != 1){
    header("Location:index.php?check=fail");
    exit;
}else{
    $_SESSION['status']=1;
    header("Location:admin/index.php");
        exit;
}
Avatar billede detox Nybegynder
28. marts 2004 - 17:21 #5
Desuden ville du jo blive sendt til: "login_please.php" selvom den ikke fanger dine $_POST variabler.
Avatar billede soundclaes Nybegynder
28. marts 2004 - 17:29 #6
Ok. Det vil jeg lige prøve at rode med. Tak for det.
Avatar billede soundclaes Nybegynder
28. marts 2004 - 17:50 #7
Det havde du sørme ret i! Så virker det.
Herligt. Tak for det!
Avatar billede detox Nybegynder
28. marts 2004 - 18:00 #8
Velbekommen c",)
Avatar billede soundclaes Nybegynder
28. marts 2004 - 18:10 #9
Der var jeg lidt for hurtig på aftrækkeren. Det virker faktisk stadig ikke. Øv.
Avatar billede soundclaes Nybegynder
28. marts 2004 - 18:14 #10
Jeg bliver rigtigt nok sendt over til den rette side efter at have fået godkendt username og password, men her bliver jeg så bare sendt videre til siden "login_please.php". Det er altså stadig et eller andet rod med session'en.
Avatar billede detox Nybegynder
28. marts 2004 - 18:19 #11
Kan du ikke tjekke sessions med:

side1.php
---------

<?php
session_start();
$_SESSION['status'] = 1;
header('Location: side2.php');
?>

side2.php
---------

<?php
session_start();
echo $_SESSION['status'];
?>
Avatar billede soundclaes Nybegynder
28. marts 2004 - 18:36 #12
Den returnerer et fint 1-tal. Så $_SESSION['status'] bliver altså sendt videre.

Er der noget galt med det følgende script?

<?php

session_start();
header("Cache-control: private"); // IE 6 tilbage-knap fix.

if ($_SESSION['status']!=1){
    echo "Tester";
    //    header("Location:login_please.php");
    exit;
}
?>

Det er specielt denne linie jeg tænker på:

if ($_SESSION['status']!=1){
      echo "Tester";
}

Det er da den rigtige syntax, ik?
Avatar billede detox Nybegynder
28. marts 2004 - 18:39 #13
Jo, den skriver 'Tester', hvis $_SESSION['status'] ikke = 1.
Avatar billede detox Nybegynder
28. marts 2004 - 18:42 #14
Så der er altså ikke noget galt med din sessions. Hvordan ser din: 'Checklogin.php' ud nu?
Avatar billede soundclaes Nybegynder
28. marts 2004 - 18:44 #15
Det ser ud til, at det virker med denne kode:

<?php

session_start();
header("Cache-control: private"); // IE 6 tilbage-knap fix.

if (!isset($_SESSION['status'])){
    header("Location:login_please.php");
        exit;
}
?>

Jeg synes bare, at det er sært, at det virker, men at den kode jeg postede ovenfor ikke virkede. Men jeg er jo heller ikke så hærdet i det her php-halløj.

Tak for al din hjælp!
Avatar billede detox Nybegynder
28. marts 2004 - 18:47 #16
Ja, det synes jeg umiddelbart osse, men hovedsagen er, du fik det til at virke.
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
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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