filipbhMedlem sedan juli 2002405 inlägg Vad menas med detta fel?
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 11520 bytes) in /customers/httpd.www/check.php on line 17
Någon som vet ett bra sätt göra en koll om sessioner finns? Finns de kan man besöka sidan. Annars kommer det upp en text och en automatisk vidarelänkning till index.php görs.. Har försökt med två olika men inget fungerar.
MatteMedlem sedan aug. 20002 975 inlägg Felmeddelandet betyder att de 8MB internminne ditt skript är tilldelat av webbservern är överskridet.
Kan hända ibland när man kör GD mot stora bilder eller liknande.
För t.ex en inloggningskontroll brukar jag göra följande.
När någon loggar in sätts en sessionsvariabel, låt oss kalla den $_SESSION['variabel'].
Sedan på varje sida som ska skyddas med inloggning använder jag följande:
<?php
session_start();
if (!isset($_SESSION['variabel'])) {
header("Location: index.php");
exit;
}
Det borde fungera med något liknande för din del.
filipbhMedlem sedan juli 2002405 inlägg Okej, ska testa att lägga till kod så sessionerna verifieras som rätt också..
Tack så länge
filipbhMedlem sedan juli 2002405 inlägg Man loggas ut direkt när man försöker logga in =(
Gjorde koden så här:
<?session_start();?>
<?
if (!isset($_SESSION['inl_user'])) {
echo("<script language=JavaScript>");
echo("self.location.replace('index.html')");
echo("</script>");
exit;
}
?>
<?
if (!isset($_SESSION['inl_pass'])) {
echo("<script language=JavaScript>");
echo("self.location.replace('index.html')");
echo("</script>");
exit;
}
?>
<?
if (!isset($_SESSION['inl_id'])) {
echo("<script language=JavaScript>");
echo("self.location.replace('index.html')");
echo("</script>");
exit;
}
?>
Är det koden som är fel?
MatteMedlem sedan aug. 20002 975 inlägg Sätter du alla tre sessionsvariablerna i din inloggning ?
Annars skickas du bara till index.html.
För felsök lägg följande överst i skriptet, före session_start():
<?php // <-- Översta raden längs till vänster
error_reporting(E_ALL);
ini_set("display_errors", "1");
session_start();
filipbhMedlem sedan juli 2002405 inlägg Ja.. De tre sätts vid inloggningen och det har inte varit problem med dem tidigare.
La in koden du skrev men det visas inget eftersom den länkas till index.html direkt.. Tar bort vidarelänkningen och ser om det kommer fram någon text.
filipbhMedlem sedan juli 2002405 inlägg Det här är koden:
<? // <-- Översta raden längs till vänster
error_reporting(E_ALL);
ini_set("display_errors", "1");
session_start();
?>
<?
if (!isset($_SESSION['inl_user'])) {
echo "user<br>";
//echo("<script language=JavaScript>");
//echo("self.location.replace('index.html')");
//echo("</script>");
exit;
}
?>
<?
if (!isset($_SESSION['inl_pass'])) {
echo "pass<br>";
//echo("<script language=JavaScript>");
//echo("self.location.replace('index.html')");
//echo("</script>");
exit;
}
?>
<?
if (!isset($_SESSION['inl_id'])) {
echo "id<br>";
//echo("<script language=JavaScript>");
//echo("self.location.replace('index.html')");
//echo("</script>");
exit;
}
?>
och jag får detta:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /customers/httpd.www/db.php:2) in /customers/httpd.www/check.php on line 6
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /customers/httpd.www/db.php:2) in /customers/httpd.www/check.php on line 6
user
Egentligen bara att sessionen redan är startad typ
filipbhMedlem sedan juli 2002405 inlägg Tog bort session_start() men det kom inte fram något felmeddelande.. Bara "user". Bytte jag plats så att session[inl_pass] låg överst visades "pass". Behåller den inte värdena eller?
MatteMedlem sedan aug. 20002 975 inlägg Du kan inte starta upp sessionen och hämta sessionsvariablerna eftersom du har en output till webbläsaren innan session_start().
Denna output sker på rad 2 i db.php.
session_start() är en header och måste sättas innan du gör någon output till webbläsaren.
Med output menas HTML-kod, echo eller print. Även ett mellanslag eller en radbrytning utan för PHP-taggarna genererar en output.
Detta gäller även för filer man inkluderar. Där får man se upp så där inte ligger något osynligt skräptecken efter den avslutande PHP-taggen.
Hur hänger dina filer check.php och db.php ihop ?
filipbhMedlem sedan juli 2002405 inlägg db.php innehåller bara två variabler med databasnamn och databaslösenord.. Använder det för att slippa skriva lösenordet och usern i varje mysql-hämtning. Kom på att db.php innehåller check. Kanske därför det inte fungerar.. La in den för att man inte ska kunna komma db (även om den inte skriver ut något) när man inte är inloggad. Ska jag ta bort check från db? Eller iaf flytta ner den?
MatteMedlem sedan aug. 20002 975 inlägg Du har något på rad 2 i db.php som ger output.
Hur ser db.php ut ?
Maska eventuella lösenord mm.
filipbhMedlem sedan juli 2002405 inlägg Hur kan du se det?
För tillfället så här:
<?//require("check.php");?>
<?
$u = "";
$p = "";
?>
MatteMedlem sedan aug. 20002 975 inlägg <?php // <-- Översta raden längs till vänster
require("check.php");
$u = "";
$p = "";
?>
Du bryter dig in och ut ur PHP och har radbrytningar emellan. Dessa genererar output.
Ska du inkludera db.php i en annan fil, tänk då på att du får inte ha någon output i den filen innan du inkluderar db.php.
filipbhMedlem sedan juli 2002405 inlägg Men det verkar ju konstigt att det ska vara fel i db.. Det står att det är line 9 i check som är fel. Dvs, första sessionsraden... Jobbigt när det aldrig kan fungera..
MatteMedlem sedan aug. 20002 975 inlägg Hur ser dina filer ut nu, och hur ser felmeddelandet ut ?
filipbhMedlem sedan juli 2002405 inlägg Felmeddelande:
Notice: Use of undefined constant inl_pass - assumed 'inl_pass' in /customers/httpd.www/check.php on line 9
pass
Check
<? // <-- Översta raden längs till vänster
error_reporting(E_ALL);
ini_set("display_errors", "1");
?>
<?
if (!isset($_SESSION[inl_pass])) {
echo "pass<br>";
//echo("<script language=JavaScript>");
//echo("self.location.replace('index.html')");
//echo("</script>");
exit;
}
?>
<?
if (!isset($_SESSION[inl_user])) {
echo "user<br>";
//echo("<script language=JavaScript>");
//echo("self.location.replace('index.html')");
//echo("</script>");
exit;
}
?>
<?
if (!isset($_SESSION[inl_id])) {
echo "id<br>";
//echo("<script language=JavaScript>");
//echo("self.location.replace('index.html')");
//echo("</script>");
exit;
}
?>
db
<?
require("check.php");
$u = "";
$p = "";
?>
filipbhMedlem sedan juli 2002405 inlägg ...och inloggningsfilen
@session_start();
@session_register("inl_user");
@session_register("inl_id");
@session_register("inl_pass");
@$_SESSION['inl_user'] = $_POST['loginname'];
@$_SESSION['inl_pass'] = $_POST['loginpass'];
@$_SESSION['inl_id'] = $data[id];
MatteMedlem sedan aug. 20002 975 inlägg Ta bort alla @ som spärrar felmeddelande. Koppla på all felsökning genom att lägga följande överst i dina skript:
<?php // <-- Översta raden längs till vänster
error_reporting(E_ALL);
ini_set("display_errors", "1");
Tag bort det först då allt fungerar.
db.php
<?php // <-- Översta raden längs till vänster
error_reporting(E_ALL);
ini_set("display_errors", "1");
require("check.php");
$u = "";
$p = "";
?>
check.php
<?php // <-- Översta raden längs till vänster
error_reporting(E_ALL);
ini_set("display_errors", "1");
session_start();
if (!isset($_SESSION['inl_pass'])) {
echo "pass<br>";
//echo("<script language=JavaScript>");
//echo("self.location.replace('index.html')");
//echo("</script>");
exit;
}
if (!isset($_SESSION['inl_user'])) {
echo "user<br>";
//echo("<script language=JavaScript>");
//echo("self.location.replace('index.html')");
//echo("</script>");
exit;
}
if (!isset($_SESSION['inl_id'])) {
echo "id<br>";
//echo("<script language=JavaScript>");
//echo("self.location.replace('index.html')");
//echo("</script>");
exit;
}
?>
inloggning
<?php // <-- Översta raden längs till vänster
error_reporting(E_ALL);
ini_set("display_errors", "1");
session_start()
// Diverse annan kod för att kolla inloggningsvariabler mm.
//Om allt är ok sätt sessionsvariablerna
$_SESSION['inl_user'] = $_POST['loginname'];
$_SESSION['inl_pass'] = $_POST['loginpass'];
$_SESSION['inl_id'] = $data['id'];
filipbhMedlem sedan juli 2002405 inlägg inloggning
Notice: A session had already been started - ignoring session_start() in /customers/httpd.www/check.php on line 6
Notice: Use of undefined constant inl_pass - assumed 'inl_pass' in /customers/httpd.www/check.php on line 8
pass
Kommer inte vidare efter det.. Skriver jag en sida manuellt så kommer det fram:
Notice: Use of undefined constant inl_pass - assumed 'inl_pass' in /customers/httpd.www/check.php on line 9
pass
MatteMedlem sedan aug. 20002 975 inlägg
Notice: A session had already been started - ignoring session_start() in /customers/httpd.www/check.php on line 6
session_start() finns någonstans tidigare i skriptet.
Inkluderar du db.php i någon fil som har session_start() ?
Notice: Use of undefined constant inl_pass - assumed 'inl_pass' in /customers/httpd.www/check.php on line 8
pass
Betyder att du saknar apostrofer/citationstecken runt ditt array-index. Du har sannolikt skrivit $_SESSION[inl_pass] istället för $_SESSION['inl_pass'].