webForumDet fria alternativet

Fel vid inloggning

PHP

7 svar · 312 visningar · startad av streetrobban

Medlem sedan jan. 20011 140 inlägg
Frågan#1

Tjenare,

Jag har skapat ett inloggningsscript som inte funkar på min localhost. Jag får följande felmeddelande.

Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0

Men när jag kör samma script på webbhotellet jag använder på nätet så funkar det.

Hur kan jag åtgärda detta?

Medlem sedan aug. 20002 975 inlägg
#2

Det låter som om du har ett index i din sessionsarray som är samma som namnet på en variabel.
Typ om du i ditt skript har både $_SESSION['id'] och $id. När register_globals är satt så kommer även $_SESSION['id'] att finnas som $id, och du har en varibelkrock.

Försök att sätta unika index för dina sessionsvariabler, t.ex genom att använda ett prefix typ $_SESSION['sess_var'] eller $_SESSION['sVar'].

Medlem sedan jan. 20011 140 inlägg
#3

Tja Matte. Jag postar koden jag använder nedan så du får se.

logga_in.php

<?php
// Skapa en session med viktig information
session_start(); 
$active = "1";
$epost = $epost;
$lösenord = $lösenord;
session_register("active");
session_register("epost");
session_register("lösenord");

require '../inkludera/databas.php';
	
// Kolla om användaren finns
mysql_select_db("databasen");
$get = mysql_query("SELECT * FROM användare WHERE epost = '$epost'");
$userRow = mysql_fetch_array($get);

if($epost == $userRow["epost"] && $lösenord == $userRow["lösenord"] && $userRow['status'] == '1') 
{
        // Gå till admin.php
	echo "ADMIN";
} 
else 
{
        // Gå till logga_ut.php
	echo "NEJ";
}

// Stäng databasen
mysql_close($open);
?>

logga_ut.php

<?php
header("Location: index.php");

session_start(); 
$active = "0"; 
session_unregister("active");
session_unregister("epost");
session_unregister("lösenord");
session_destroy();
?>

admin.php

<?php
session_start();

if ( $HTTP_SESSION_VARS[ 'active' ] == "1" ) 
{

$datum = date("Y-m-d");
$tid = date("H:i");
?>

INNEHÅLL

<?php
} 
else
{
?>
<script language=JavaScript>
self.location.replace('logga_ut.php')
</script>
<?php
}
?>
Medlem sedan aug. 20002 975 inlägg
#4

Förstår ärligt talat inte vad du försöker göra i skriptet.

Vad är t.ex.

$epost = $epost;
$lösenord = $lösenord;

Tag en koll på vilka variabler du sätter med session_register() och vilka variabler du sedan använder.

Använd inte session_register/session_unregister överhuvudtaget, utan använd dig av sessionsarrayen $_SESSION för att sätta och hämta dina sessionsvariabler.
Använd där index som du inte använder som variabelnamn.

I logga ut, lägg din header efter du kört session_destroy().

Medlem sedan mars 20032 667 inlägg
#5

Sätt även register_globals off så inte exempelvis $_GET['id'] kan hämtas som enbart $id.

Medlem sedan jan. 20011 140 inlägg
#6

Matte: Jag hämtar $epost och $lösenord från ett formulär och ger dom samma namn.

Medlem sedan aug. 20002 975 inlägg
#7

Testa något på det här hållet:

<?php
// Skapa en session med viktig information
session_start(); 

require '../inkludera/databas.php';
    
// Kolla om användaren finns
mysql_select_db("databasen");

$sql = "
  SELECT id FROM användare 
  WHERE epost = '{$_POST['epost']}' 
        AND lösenord = '{$_POST['lösenord']}' 
        AND status = '1'
";
$get = mysql_query($sql);

if(mysql_num_rows($get) > 0)
{
    $_SESSION['sess_id'] = mysql_result($get, 0, 'id');
    $_SESSION['sess_passwd'] = $_POST['lösenord'];
    $_SESSION['sess_epost'] = $_POST['epost'];
    $_SESSION['sess_active'] = 1;
        // Gå till admin.php
    echo "ADMIN";
} 
else 
{
        // Gå till logga_ut.php
    echo "NEJ";
}

// Stäng databasen
mysql_close($open);
?>

Jag la till att hämta och spara `id` som sessionsvariabel, då detta oftast är det snabbast sättet att identifiera användaren när man hämtar från databasen.
För du har väl en id-kolumn ?

När du loggar ut:

<?php
session_start();

$_SESSION = array();
session_destroy();

header("Location: index.php");
exit;
 
?>
Medlem sedan jan. 20011 140 inlägg
#8

Matte: Tack för din hjälp! Jag har en id kolumn för varje användare ja. Jag ska testa scriptet snart. Måste bara sola lite först! Solen steker på bra här! :)

256 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
114 ms — ändringar (db)