08. juli 2003 - 14:46Der er
61 kommentarer og 1 løsning
Check af login, uden sessions!
www.xup.dk/baha Hvordan kan jeg lave "UDEN SESSIONS" sådan at man skal være logget ind i iframen "login" for at komme ind på "I byen -> Net Radio" siden ?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Når det skal være uden sessions, går jeg ud fra det ligeledes skal være uden cookies... Så er du enten nødt til at lave noget htaccess eller overføre variabel i addresselinjen. (hvilket du også kan med sessions for at undgå cookies) Det er ikke særlig sikkert og funktionelt at lave en IP løsning. Det er i øvrigt heller ikke ret sikkert at overføre variabler via addresselinjen, hvis andre end dig selv bruger computeren. Hvad er der i øvrigt galt med sessions? :)
Jeg har før prøvet at lave det med sessions - uden held, og har ikke kunne få den support jeg havde håbet på herinde på eksperten, derfor droppede jeg ideen med sessions, og ville så prøve at gøre det med ved at overføre login informationerne, krypteret over til parent.location, på en eller anden måde, men også uden held, så nu prøver jeg at få support på dette ;)
Hmm, jeg ville nu råde dig til at prøve igen med sessions, hvis ikke en htaccess løsning er noget du kan bruge. Hvis den der løsning skulle fungere, så skulle krypteringsnøglen hele tiden ændres, ellers ville en anden bruger som sagt kunne logge ind på et senere tidspunkt, ved at følge samme url. Jeg tror helt sikkert det nemmeste ville være en sessionsløsning. Har du læst nogle tutorials m.m om det?
www.xup.dk/baha - Login systemet kan jeg også "Crackes" hvis en anden bruger din comp på et senere tidpunkt, men jeg holder mig til det klasiske login system - kan du hjælpe ?
<html> <head> <title>Login</title> <link rel="stylesheet" href="inc/login.css" type="text/css"> <SCRIPT LANGUAGE="JavaScript"> <!-- function formCheck(formobj){ //1) Enter name of mandatory fields var fieldRequired = Array("user", "pass"); //2) Enter field description to appear in the dialog box var fieldDescription = Array("Brugernavn", "Kodeord"); //3) Enter dialog message var alertMsg = "Du mangler at udfylde:\n";
var l_Msg = alertMsg.length;
for (var i = 0; i < fieldRequired.length; i++){ var obj = formobj.elements[fieldRequired[i]]; if (obj){ switch(obj.type){ case "select-one": if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == ""){ alertMsg += " - " + fieldDescription[i] + "\n"; } break; case "select-multiple": if (obj.selectedIndex == -1){ alertMsg += " - " + fieldDescription[i] + "\n"; } break; case "text": case "textarea": if (obj.value == "" || obj.value == null){ alertMsg += " - " + fieldDescription[i] + "\n"; } break; default: if (obj.value == "" || obj.value == null){ alertMsg += " - " + fieldDescription[i] + "\n"; } } } }
if (alertMsg.length == l_Msg){ return true; }else{ alert(alertMsg); return false; } } //--> </SCRIPT> <SCRIPT> function submitonce(theform){ if (document.all||document.getElementById){ for (i=0;i<theform.length;i++){ var tempobj=theform.elements[i] if(tempobj.type.toLowerCase()=="submit") //disable em tempobj.disabled=true } } } </SCRIPT> </head> <body bgColor="#eeeeee" oncontextmenu="return false" ondragstart="return false" onselectstart="return false"> <form action="<? $pass = md5($pass); echo "logincheck.php?pass=$pass";?>" method="post" onSubmit="return formCheck(this);submitonce(this)"> <table border="0" cellpadding="0" cellspacing="0" width="27%" align="center"> <tr> <td width="32%">Brugernavn: </td> <td width="68%"> <input type="text" name="user" size="20" class="form"></td> </tr> <tr> <td width="32%">Kodeord:</td> <td width="68%"> <input type="password" name="pass" size="20" class="form"></td> </tr> <tr> <td width="32%"> </td> <td width="68%"> <input type="submit" value="Login" name="Login" class="form"></td> </tr> </table> </form> Har du ikke allerede en bruger ?<br> <a href="opret.php">Så tryk her</a> </body> </html>
Min logincheck.php fil :: <html> <head> <title>LoginCheck</title> <link rel="stylesheet" href="inc/login.css" type="text/css"> </head> <body bgColor="#eeeeee" oncontextmenu="return false" ondragstart="return false" onselectstart="return false"> <? include("config.php"); $pass = strtolower($pass); $pass = md5($pass); $result = mysql_query("select * from community where user = '$user' and pass = '$pass'");
session_start(); ... if ($number!=0){ $_SESSION["user"]=$user; // Du kan gemme alle de info du vil i session, eller du kan nøjes med at gemme username og så kalde nødvendige info fra db via det. echo "<script language='javascript'> parent.main.location.href='velkommen.php'; </script> <meta http-equiv='refresh' content='1;url=loginok.php'> Logger på... Vent venligst!"; } else { echo "Forkert kode eller brugernavn - prøv igen<br><a href=login.php>Tilbage</a>"; }
Hvis du forstår? I stedet for at medsende variablerne, så sætter du en session først og kalder den session igen i de sider du refresher.
Hør... Princippet er: En session fungerer som et array du kan indsætte data i. Dette array bliver gemt på serveren, og får tildelt et id. En cookie bliver gemt på klientens computer indeholdende dette session id, for at de forskellige sessions kan skelnes fra hinanden. Dvs. du kan lege med sessions ligesom du kan med alle andre variabler. Du kan endda sætte session til auto_start så du ikke engang behøver session_start(); Så er det bare at fyre en masse ($_SESSION["navn"] = "værdi";) af, og du kan lave en masse nydelige funktioner.
På de beskyttede sider, tjekker du sp om man er logget ind ved: <?php session_start(); if(!isset($_SESSION["user"])){ echo "Du skal være logget ind for at kunne se denne side."; ] else { echo "Du er logget ind, så du får del i mine hemmeligheder!!!"; } ?>
Prøv lige i din logincheck.php, i dit javascript der redirecter, at indsætte en: alert('".$_SESSION["user"]."') - Så vi kan se om den overhovedet bliver sat.
Ok. Så er det jo et spørgsmål om at den ikke får den med. Hvordan ser din php.ini ud? Har du ændret nogle ting omkring sessions der, eller er indstillingerne standard?
session.cookie_lifetime skal gerne stå til 0 for at sessionen først ophører når browseren lukkes. session.use_cookies skal gerne være 1. Ydermere kan du tjekke dine sikkerhedsinstillinger i din browser for at se om du blokerer.
Prøv lige at lave en fil med følgende indhold og derefter køre den:
test:
<?php session_start(); if($id!=1){ $_SESSION['user'] = "Sessions virker!"; echo "<a href='".$_SERVER["PHP_SELF"]."?id=1'>Klik her for at teste</a><br><br>(Hvis næste side er blank, virker sessions ikke.)"; } else { echo $_SESSION['user']; } ?>
Kan en firewall gøre sådan at man ikke kan lægge sessions på serveren ? Fordi jeg ved at min server står bag en "STOR" firewall - og jeg har også problemer med mit andet login system som kører på sessions, www.xup.dk der !
Kan det være noget med serveren / Firewallen / PHP Versionen ?
Hvad er din PHP version? Nej, det er nok ikke din firewall, det foregår jo lokalt.
Jeg har lige testet ovenstående testfil på 2 forskellige servere, den ene med linux, den anden med windows. Den virkede kun på linux, selvom de har præcist samme konfiguration hvad angår sessions. Den windows server kører i øvrigt med IIS og ikke Apache, men du kører med Apache ikke? (Så det er ikke der den ligger)
Hvor kan jeg se php versionen ? - jeg har nemlig store problemer med min chat www.xup.dk også, den kører nemlig også med sessions, og det virker ikke !
Kan det mon være fordi min server er windows 2000 - ville det hjælpe at installere Linux debian eller red hat på ? - for så gør jeg da det ?!
Det burde virke på windows også. Det skal det! Du kan lave en fil med følgende indhold: <? phpinfo(); ?> Den vil vise dig en masse god info om din opsætning.
Jeg har aldrig haft noget der benyttede sessions, til at ligge på den windows maskine, og har først bemærket nu at det ikke fungerer. Så jeg må sgu blive dig svar skyldig mht. årsagen... Jeg tror selv jeg opretter et seperat spørgsmål omkring dette problem, mens jeg fusker videre, hehe.
:) Jeg kan lige lave en fil med indholdet: <? phpinfo(); ?> Så kan jeg give dig adr. så kan du kigge på det hvis du gider, men læg lige et svar her, det fortjener du sgu for al din hjælp! - Håber på et svar ang. sessions problemet, vil regne med at det var derfor jeg heller ikke kunne få det til at virke sidste gang jeg forsøgte med sessions ;)
Uhm, hvis du sætter register_globals til off, så vil de eksempler jeg har givet dig virke. Hvis du beholder den på on, så skal du istedet bruge session_register("variabelnavn"); efter du har defineret variablen.
Kan du ikke lige som en sidste ting lndre oven stående, så det vil virke når register_globals er on ! - Det virker nemlig ikke! det jeg sendte dig, sidst!
Undskyld du, er lige akkurat kommet tilbage til computeren, var lige nødt til at løbe i et par minutter. Uhm, sidder lige og kigger på det, til en start, hedder det så ikke mysql_num_rows i stedet for mysql_numrows i din linje her: if ($r = mysql_numrows($sel) == 1){
Ok, skriv lige, jeg skal spise nu, kommer back og ser hvad du har skrevet om 15 min ;) Please ret det hele igennem og send mig det - Så er jeg mega glad!
Med din kode der, og som det ser ud på siden, så er det jo ikke, i første omgang, sessions der ikke virker.
if ($r = mysql_numrows($sel) == 1){ ser altså ret mærkelig ud.
Der er flere variabler jeg ikke lige kan gennemskue hvorfra kommer, og der er mange faktorer der kan gøre at den ikke godkendes, og årsagerne kan også ligge i f.eks. "opret bruger" filen.
Det var godt nok meget kode for så lidt...det kan klart gøres nemmere med php & .htaccess.
oh well....as long as it works :)
Synes godt om
Ny brugerNybegynder
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.