Gå til innhold

Sessions funker i IE men ikke Opera...


Anbefalte innlegg

Hei, er det noen kloke hoder her som ser hvorfor dette ikke fungerer i Opera 7.23?

 

<?php
session_start(); 

if($_SESSION['brukernavn'] && $_SESSION['passord']){
include("pobasekopling.php");
$passord=($_SESSION ['passord']);
//Sjekker passord og brukernavn med database 
$henter_bruker = @mysql_query("SELECT brukernavn FROM brukere WHERE brukernavn='{$_SESSION['brukernavn']}' 
AND passord='{$passord}'"); 
if(@mysql_num_rows($henter_bruker) == 0) 
{ 
header('Location: http://inter.net/registrer.php'); 
} 
else 
{ 
echo '';
} 
} 
else 
{ 
header('Location: http://inter.net/registrer.php'); 
} 

?>

<HTML>
<HEAD>
osv...

 

Det jeg gjør her er at hvis alt er riktig printer den "ingenting" (echo '';) til skjermen og går videre ned til der hvor html-kodingen starter.

 

Dette fungerer i IE 6.0, men ikke i Opera 7.23. Sukk...

 

Blir veldig glad hvis noen ser hva jeg gjør galt! :)

Lenke til kommentar
Videoannonse
Annonse

Hva er du forsøker å gjøre med denne:

if($_SESSION['brukernavn'] && $_SESSION['passord'])

?`

 

Hvis hva?

isset() !empty()?

Det du gjør nå er å sjekke hvis variabelene = TRUE

 

Prøv denne for å sjekke hvilke variabler sessionen inneholder:

//Sett inn denne koden

foreach($_SESSION as $var){

echo "$var<br>\n";

}

Lenke til kommentar

Er litt usikker på hva du mener.

 

 

Scriptet nå går som følger:

  • Sjekk om det er et brukernavn og passord i sesjonen.

  • Hvis det er det, koble til databasen og hent brukernavnet og passordet der som er identisk med det som følger sesjonen.

  • Hvis det ikke er noe som matcher, send brukeren til registreringssiden

  • Hvis det er full match skriv ingenting (her kommer løsningen hvor jeg har valgt at ingenting skal skrives, rett og slett fordi jeg ikke vet hvordan jeg skal be php om ikke å gjøre noen ting.)

  • Hvis det ikke fulgte brukernavn og passord med i sesjonen, send brukeren til registreringssiden

  • <HTML>(Selve innholdet på siden. (Som da kun blir tilgjengelig hvis det fulgte med passord og brukernavn, og de stemte overens med basen.) Egentlig burde dette vært der hvor jeg nå velger å skrive "ingenting" (vanskelig å uttrykke at man ikke skriver noe... hehe...), men jeg fikk så mye parsingfeil at jeg fant denne løsningen mye enklere. :)

Burde kanskje skrevet dette tidligere, men det som skjer er at jeg konsekvent blir sendt til registreringssiden hvis jeg bruker Opera.

Endret av primaxx
Lenke til kommentar

Sjekk om det er et brukernavn og passord i sesjonen.

Det gjør du ikke nå, nå sjekker du om verdiene er TRUE - det fungerer i mange tilfeller, dvs. så lenge ikke bruker eller pass er FALS eller PHP endrer måten å håndtere dette på

 

Hvis det er det, koble til databasen og hent brukernavnet og passordet der som er identisk med det som følger sesjonen.

Her burde du ta en kikk på mysql_escape_string()

og bruke . for å sette sammen setningen. brukernavn='".$_SESSION['brukernavn']."'

 

Hvis det ikke er noe som matcher, send brukeren til registreringssiden

 

Hvis det er full match skriv ingenting (her kommer løsningen hvor jeg har valgt at ingenting skal skrives, rett og slett fordi jeg ikke vet hvordan jeg skal be php om ikke å gjøre noen ting.)

Oops... her var det jeg som så litt feil, ang. det med plassering av tekst.

 

Grunnen til at du ikke får opp noen feilmeldinger er at du har plassert @ foran spørringene, ta bort denne og fiks det med .

Lenke til kommentar

Sjekk om det er et brukernavn og passord i sesjonen.

Det gjør du ikke nå, nå sjekker du om verdiene er TRUE - det fungerer i mange tilfeller, dvs. så lenge ikke bruker eller pass er FALS eller PHP endrer måten å håndtere dette på

 

Hmm... Kan du gi meg et hint om hva jeg burde gjøre i stedet for? Har slitt med dette så lenge nå at kreativiteten og mulighetene til å se nye løsninger er på et tilnærmet absolutt lavmål... :)

 

Forresten, jeg har nok forklart meg litt utydelig. Hvis det skulle være noen tvil, dette er ikke koden som kjører etter at brukeren har registrert brukernavn og passord. Strukturen er som følger:


  • Forside, med felter for innlogging.


  • php som sjekker mot basen om bruker eksisterer, og (hvis ja) sender deretter brukeren til innlogget forside


  • Det er først når brukeren vil til kreditorer.php fra den innloggete forsiden at scriptet det handler om her kjøres.

Jeg klarer å logge meg inn i Opera, det er først når jeg skal videre fra innlogget forside jeg begynner å slite. (Problemet er at jeg først hadde laget mitt eget script, deretter fant jeg et på nettet som jeg syntes så bedre ut, dette har jeg så flikket litt på, og nå kommer jeg altså hverken att eller fram...)

 

Hvis det ville vært mulig skulle jeg gjerne brukt scriptet jeg bruker for å logge meg inn også når jeg allerede er innlogget, men det klarer jeg ikke. Innbiller meg at årsaken til det har noe med $_POST() variablene å gjøre, men kan for lite til å finne det ut selv. Har forsøkt å endre de til $_GET() uten at det hjalp...

 

Her er scriptet som lar meg logge inn, både i Opera og IE

 

 

<?PHP
session_start(); 
$_SESSION['brukernavn'] = $brukernavn; 
$_SESSION['passord'] = $hentet_passord['passord'];

/*	Setter betingelser hvis brukernavnet og passordet er
 fyllt inn.	*/
if($_POST['brukernavn'] && $_POST['passord']) {

/*	Krypterer det registrerte passordet	*/
$kryptert_passord=(crypt($_POST['passord'],"nøkkel, skjult for sourcecode.no"));

/*	Henter filen som kopler til databasen	*/
include("pobasekopling.php");

/*	Henter brukernavnet og passordet som er lagret i
 databasetabellen "brukere", og som matcher de
 inntastede dataene.	*/
$sjekk_passord="SELECT brukernavn,passord FROM brukere 
   WHERE  (brukernavn='{$_POST['brukernavn']}')";
$dbpassord=mysql_query($sjekk_passord);

/*	Lagrer dataene fra databasen i et array, for å splitte
 brukernavn og passord.	*/	
$hentet_passord=mysql_fetch_array($dbpassord);

/*	Sjekker om det inntastede passordet er det samme
 som passordet i databasen.	*/
$basepassord=($hentet_passord['passord']);
if(($kryptert_passord)==($hentet_passord['passord'])) {

/*	Hvis passordet er likt med databasepassordet videresendes
 brukeren til sine personlige sider.	*/
header("Location: http://inter.net/innlogget.php");
exit;
   }
   
   /*	Hvis passordene ikke matcher genereres en feilmelding.	*/
   else {
   	print "Passord eller brukernavn er feil, eller manglende utfylt";
   }
}
/*	Betingelse hvis det ikke er fylt inn både brukernavn og passord	*/
else {
print "Du må fylle inn brukernavn og passord!";
}
?>

Lenke til kommentar

Hei igjen, guruer!

 

Dette vil liksom ingen ende ta. Nå får jeg ikke engang logget inn... :dontgetit:

 

Jeg sjekket ut scriptet SirIce tipset meg om

( http://www.misinterpreted.net/indexarticlephp-1.htm ),

og som dere ser er dette en råkopi av fila validate.php, med unntak av at jeg henter verdiene det skal sjekkes mot fra en MySQL-base, hvor passordene ligger kryptert. Jeg må med andre ord kryptere passordet fra skjemaet også før jeg sjekker det mot det som er lagret i basen.

 

Nå blir jeg sendt direkte til registrer.php...

 

Jeg ser ingen feil, men det gjør kanskje dere?

 

 

 

<?php
session_start();

$kryptert_passord=(crypt($_POST['passord'],"nøkkel, skjult for sourcecode.no"));  

include("pobasekopling.php");

$frabasen = "SELECT brukernavn,passord FROM brukere 
   WHERE  (brukernavn='{$_POST['brukernavn']}')";
$dbpassord=mysql_query($frabasen);

$baseRad=mysql_fetch_array($dbpassord);

$basepassord=($baseRad['passord']);	
$basebruker = ($baseRad['brukernavn']);


if (($_POST["brukernavn"] == $basebruker) and ($kryptert_passord == $basepassord)){

$_SESSION["login"] = "true";
header("Location: http://www.inter.net/innlogget.php");
exit;
} else {

$_SESSION["error"] = "<font color=red>Beklager... Feil brukernavn eller passord!</font>";
header("Location: http://www.inter.net/registrer.php");
}

?>

For ordens skyld: Jeg vet at det er her det er galt, ettersom jeg hadde skrevet

 

header("Location: http://wwwinter.net/registrer.php");

 

i stedet for

 

header("Location: http://www.inter.net/registrer.php");

 

og fikk beskjed om at siden ikke kunne vises hver gang jeg forsøkte å logge meg inn.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...