Avatar billede jammerlab Nybegynder
11. februar 2006 - 12:39 Der er 20 kommentarer og
1 løsning

Har problemer med sessions

Jeg har et problem med sessions... et login systsem.

if($login) {

$query = mysql_query("SELECT * FROM kalender_user WHERE b = '".$_POST[bruger]."' AND p = '".$_POST[password]."' LIMIT 1")or die (mysql_error());
if(mysql_num_rows($query)>0)
{
    $row = mysql_fetch_array($query);
    session_start();
    $_SESSION['lvl'] = $row[lvl];
    $_SESSION['bruger'] = $bruger;
    $_SESSION['password'] = $password;
}
}

Den kontrollere helt fint om sessions er sat... neden for denne kode har jeg en kontrol af hvad lvl er sat og den fungere også! Men når jeg så skifter side i browseren så dør alle sessions!! Jeg require en head.php på hver side som indeholder
<? session_start(); ?> i toppen... så hvorfor dør min session?!
Avatar billede yezbarh Nybegynder
11. februar 2006 - 12:41 #1
Du kan ikke sætte session_start(); det sted du har.
session_start(); SKAL altid været i toppen af dokumentet
Avatar billede Slettet bruger
11. februar 2006 - 12:48 #2
Du skal bare kalde session_start() inden der sendes noget til klienten, p.g.a. headers.
Men... Kører du det på en Windowsmaskine? Og har du regster_globals slået til? For jeg har før set at det kunne give problemer.
Avatar billede jammerlab Nybegynder
11. februar 2006 - 12:49 #3
ja det er en windows maskine... og regster_globals er slået til.
og så har jeg jo session_start(); i toppen af alle mine dokumenter inden noget bliver sendt :)
Avatar billede Slettet bruger
11. februar 2006 - 12:50 #4
- Øh, men noget helt andet er... Lige pt. er din session_start() betinget af at der findes en bruger udfra de POST-værdier. Men det gælder måske kun den side der?
Avatar billede Slettet bruger
11. februar 2006 - 12:51 #5
Ah du.... Prøv lige at bruge session_register() til at sætte dine sessions med i stedet for.
Avatar billede jammerlab Nybegynder
11. februar 2006 - 12:51 #6
Denne side er login siden... har indtaster man bruger og password som den så kører igennem login... ud fra det sætter den sessions...
Avatar billede Slettet bruger
11. februar 2006 - 12:54 #7
Foreskriften lyder:

1) session_register() kan kun bruges med register_globals on.

2) $_SESSION['var'] = 'value' kan bruges uafhængigt af register_globals værdi.

- Men på Windows har jeg før set der går ged i nr. 2 hvis register_globals er on.
Avatar billede jammerlab Nybegynder
11. februar 2006 - 12:56 #8
<? session_start(); ?>
<?php require 'mysql.php';?>
<?php require 'dims.php';?>
<?

if($login) {

$query = mysql_query("SELECT * FROM kalender_user WHERE b = '".$_POST[bruger]."' AND p = '".$_POST[password]."' LIMIT 1")or die (mysql_error());
if(mysql_num_rows($query)>0)
{
    $row = mysql_fetch_array($query);
    session_start();
    $_SESSION['lvl'] = $row[lvl];
    $_SESSION['bruger'] = $bruger;
    $_SESSION['password'] = $password;
}
}

if(!$_SESSION[bruger]) {

require 'head.php';

?>
<form action="<? echo $PHP_SELF ?>" method="post">
<center>
<table cellspacing=2 cellpadding=2>
<tr>
<td>
<span class="text3">Brugeravn:<br>
<input type="text" name="bruger" class="form"><br>
Password:<br>
<input type="password" name="password" class="form"><br><br>
<input type="submit" style="width: 0; height: 0"><input type="submit" class="form" value="Login" onfocus="this.blur()">
<input type="hidden" name="login" value="true" class="form">
</span>
</td>
</tr>
</table>
</center>
</form>
<?

}
if($_SESSION[lvl] == 1) {
?>
<? session_start(); ?>
<html>
    <head>
        <title>Administrator (kasserer/Udlejer/Webmaster)</title>
    </head>
    <frameset cols="10%,90%">
        <frame name=admin_menu src="admin_1_menu.php">
        <frame name=main src="admin_1_lej.php">
    </frameset>
</html>
<?
}

if($_SESSION[lvl] == 2) {
?>
<? session_start(); ?>
<html>
    <head>
        <title>Tilsynet</title>
    </head>
    <frameset cols="20%,80%">
        <frame name=admin_menu src="admin_2_menu.php">
        <frame name=main src="admin_2.php?vis=true">
    </frameset>
</html>
<?
}
?>


Denne kode fungere helt fint... jeg kan se hvis jeg laver en exit; efter login at den sætter sessions... problemet er når den så går ned til lvl og skal kalde framet så sender den ikke sessions til den nye side så jeg for bare en "Du er ikke logget ind"... jeg har <? session_start(); ?> i toppen af alle mine dokumenter!
Avatar billede Slettet bruger
11. februar 2006 - 12:56 #9
Jeg ville nok overveje at slå register_globals fra og se om det virker, når du alligevel benytter de korrekte arrays m.v.
Avatar billede Slettet bruger
11. februar 2006 - 12:58 #10
Hehe, du behøver ikke alle de <? session_start(); ?> rundt omkring. Én enkelt i toppen af dokumentet er tilstrækkeligt.
Men prøv lige at tjekke om ikke det er kombinationen af Windows og register_globals der driller dig.
Avatar billede jammerlab Nybegynder
11. februar 2006 - 13:10 #11
Jeg har (lokalt) windows med globals ON og det fungere det fint... jeg tror serveren ude fra har dem til off... hvad skulle jeg så bruge?
Avatar billede Slettet bruger
11. februar 2006 - 13:12 #12
Hvis det virker med globals ON, men ikke virker med globals OFF - så kunne problemet være dette:

if($login) {

- Dit script kommer simpelthen aldrig ned til tjek på bruger i databasen.
Avatar billede jammerlab Nybegynder
11. februar 2006 - 13:13 #13
Det gør den :) Alt fungere some det skal nu... jeg har lavet kontrol af sessions og de bliver sat! men når mit script sender en videre til

if($_SESSION[lvl] == 1) {
?>
<? session_start(); ?>
<html>
    <head>
        <title>Administrator (kasserer/Udlejer/Webmaster)</title>
    </head>
    <frameset cols="10%,90%">
        <frame name=admin_menu src="admin_1_menu.php">
        <frame name=main src="admin_1_lej.php">
    </frameset>
</html>
<?
}

if($_SESSION[lvl] == 2) {
?>
<? session_start(); ?>
<html>
    <head>
        <title>Tilsynet</title>
    </head>
    <frameset cols="20%,80%">
        <frame name=admin_menu src="admin_2_menu.php">
        <frame name=main src="admin_2.php?vis=true">
    </frameset>
</html>
<?
}
?>

så kontrollen af sessions
if(!$_SESSION['bruger']) { echo "<span class=text3>Du er ikke logget ind.</span>"; exit; }
i de nye dokumenter bliver aktiveret...
Avatar billede jammerlab Nybegynder
11. februar 2006 - 13:18 #14
Jeg kan sagtens sætte en session på den måde som jeg gør... den bliver bare ikke ført videre i de næste dokumenter
Avatar billede Slettet bruger
11. februar 2006 - 13:28 #15
Ok...

Prøv lige at lave en fil med følgende script og kør den:

<?php
session_start();
if(!$_GET['check']) {
  $_SESSION['var'] = "Sessions virker!";
  header("Location: " . $_SERVER['PHP_SELF'] . "?check=1");
  exit;
}
print $_SESSION['var'];
?>
Avatar billede jammerlab Nybegynder
11. februar 2006 - 14:41 #16
sker intet
Avatar billede Slettet bruger
11. februar 2006 - 14:45 #17
Hvilke specs har du prøvet scriptet på?
Windows / register_globals on?

Så prøv at køre dette script der:

<?php
session_start();
if(!$_GET['check']) {
  session_register("var", "Sessions virker!");
  header("Location: " . $_SERVER['PHP_SELF'] . "?check=1");
  exit;
}
print $var;
?>
Avatar billede jammerlab Nybegynder
11. februar 2006 - 16:35 #18
Jeg har testet det på min apache server windows xp... der fungere det fint med globals on... det har tidligere virker på webhotelets server, men det gør det ikke nu... de har ikke ændret i deres settings siger de...
Avatar billede jammerlab Nybegynder
11. februar 2006 - 16:35 #19
og din kode virkede forresten ikke ;9
Avatar billede jammerlab Nybegynder
13. februar 2006 - 01:03 #20
Jeg kan se min kode fungere ... jeg har testet den på andre webhotels nu... så fejlen må ligge hos webhotelet... tak for hjælpen smid et svar :)
Avatar billede Slettet bruger
13. februar 2006 - 10:14 #21
Selv tak. Godt du fandt ud af det.
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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