Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Lige præcis. Jeg har allerede et fint login script men problemet er at jeg bruger det på flere forskellige hjemmesidersom alle ligger på samme server. Hvis jeg logger ind på hjemmeside1 kan jge få adgang til hjemmeside2 uden at logge ind selvom brugernavn og password er forskellige. Det duer jo ikke rigtig, og jeg mangler virkelig en løsnin på problemet.
if(//her tjekker du om kode ord er korrekt) { $_SESSION[Brugernavn]=$_GET[brugernavn]; } else { echo "Du er ikke logget ind"; }
Jeg bruger GET fordi jeg ikke ved hvordan du ellers overfører dine variabler, og til det er GET det man ser oftest brugt. Det du gør er at du sætter din session (Brugernavn) til at være det samme brugeren indtastede hvis det er korrekt, hvis det ikke er korrekt skriver den bare ud at man ikke er logget ind.
Nej undskyld, jeg skriver da noget forfærdeligt vrøvl, Det holder jo ingensteder.
<?php
$host="localhost"; // Host name $username=""; // Mysql username $password=""; // Mysql password $db_name=""; // Database name $tbl_name=""; // Table name
Jeg viser dig lige min kode i håbet om at du gider se på det. :-)
koden består af 3 filer:
tilpas.php (som er den side der kræver logind) har denne kode øverst på siden: -------------------- <?php session_start(); if(!$_SESSION['login']) header("Location: login.php"); ?>
<?php if($login_error) { // For sikkerhedens skyld, så afslør aldrig HVAD der er galt // men blot at der er en fejl med brugernavn og/eller passsword. echo "<br /><br /><center><b>Kun adgang med korrekt brugernavn og password</b></center>"; } ?>
Du kan jo bruge dir(__FILE__) eller $_SERVER['SERVER_NAME'] til at skelne mellem de forskellige sider. Du skal bruge dem alt efter hvordan de to filer ligger i forhold til hinanden. Hvis de ligger i samme mappe så:
Kan være en ide, som jeg i alle dine andre spørgsmål om samme emne har prøvet at forklare dig. Du bør, før du går videre læst om session og array, da det ikke lader til du har megen kendskab til de to dele.
Udover at olebole har ret i at det ville klæde dig gevaldigt at gøre dine øvrige spørgsmål færdige, lyder det som om at det er fordi du ikke ved hvad du laver.
Det scenarie du beskriver vil implicit medføre at du - ved at sætte en session på dit 'webhotel' - kan besøge andres 'webhoteller' på den samme server og dermed tvinge dig adgang til deres session baserede systemer; men sådan fungerer det ikke.
En session - som standard - genkendes via en cookie, sat i klientens browser. Browseren vil, for det rette domæne sende det pågældende session id med til serveren, hvor PHP vil hente de oplysninger frem der er tilknyttet det session id.
Kort fortalt, den session du sætter på example.org kan ikke være den samme som du sætter på example.com. Det er din kode der fejler og har ikke noget med sessions at gøre.
repox: Spørgerens problem er at vedkommende har flere hjemmeside i forskellige mapper, men under samme webhotel under et domæne. Derfor ikke forskellig session.
<?php if($login_error) { // For sikkerhedens skyld, så afslør aldrig HVAD der er galt // men blot at der er en fejl med brugernavn og/eller passsword. echo "<br /><br /><center><b>Kun adgang med korrekt brugernavn og password</b></center>"; } ?>
hov for der ikke kommer nogen misforståelser er side1,side2,side3 allesammen mapper hvori der ligger index.php,variable.php,login.php,logout.php og tilpas.php
Så er der jo ikke andet for end at du skal lave lidt debuging. Du bliver nød til at skrive så mange variabler ud som mulig for har se hvad der går galt.
Session login = Session SITE = Mappe er: /home/public_html/Externalsites/side1
og login.php:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/public_html/Externalsites/side1/login.php:5) in /home/public_html/Externalsites/side1/login.php on line 6
Nu kan login.php ummulig skrive det du skriver, da jeg ikke har skrevet noget med "Mappe er ...". Vis igen din kode for de to filer. Husk dog på at du bør lukke din browser hver gang du har først dit script, ellers dræbes sessionen ikke.
<?php if($login_error) { // For sikkerhedens skyld, så afslør aldrig HVAD der er galt // men blot at der er en fejl med brugernavn og/eller passsword. echo "<br /><br /><center><b>Kun adgang med korrekt brugernavn og password</b></center>"; } ?>
Jeg fandt en meget mere enkel løsning på problemet, jeg inkluderer jo alligevel variable.php så i stedet for $_SESSION['login'] bruger jeg bare $_SESSION['<?=$sessionname?>']
Nu mangler jeg bare en måde hvorpå jeg kan angive $sessionname til at være /home/public_html/Externalsites/side1
Jeg har prøvet med $sessionname = dirname(__FILE__); men det virkede desværre ikke
Jeg prøvede med $_SESSION['<?=$pass?>'] istedet for $_SESSION['login'] og det virkede som det skulle, men alligevel kan det jo godtske at nogen laver samme password selvom det er ret usansynligt. Så hvis du kan fortælle mig hvordan jeg kan angive en variabel til at være mappestrukturen så ville det være super, hvis man altså kan det..??
Jeg har prøvet med $sessionname = dirname(__FILE__); men det virkede desværre ikke
Jamen, tag nu den løsning jeg har givet dig. Ud over det så er det du skriver, $_SESSION['<?=$sessionname?>'], så meget forkert, at det lyser langt væk at du skal starte forfra med php. Du kan jo slet ikke håndtere arrays eller variabler.
Jeg har testet min løsning på en server med "forskellige" hjemmesider i hver sin mappe og det virker.
Det virker ikke på min server, når jeg forsøger at logge ind står den bare og loader og kommer aldrig frem med login.php, hvis jeg går direkte ind på login.php og logger ind så står den også bare og loader uden der skere noget som helst i flere minutter..
Du mangler at sætte exit(); efter hver gang du kalder header(), lige som jeg har gjort. Bare fordi du kalder header() betyder det ikke at der koden som kommer efter ikke bliver kørt, men det vil exit sørge for den ikke bliver.
Dernæst skal du have flyttet din første brug af $_POST ind i if-løkken´som jeg også har gjort, da du ellers vil tilgå et element i et array som ikke er der, og derfor vil for en Notice om fejl.
Du bør også når du udvikler slå alle fejlbeskeder til, så du har mulighed for selv at rette de fejl som måtte være der. Du kan sikkert gøre det under setup af din hjemmeside hos din host, ellers kan du slå det til ved at sætte error_reporting(E_ALL); øverst i alle dine php sider.
så opstod der alligevel et problem. Login funktionen virker ikke hvis jeg sætter en URL forward på undermappen og beholder domænet i browserens adresse linje, hvis jeg derimod ikke beholder domænet i browseren men accepterer at den skriver stien til mappen så virker login funktionen godt nok...
Løste det ved bruge basename(dirname(__FILE__)) istedet for bare dirname(__FILE__)
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.