17. juni 2007 - 10:01Der er
95 kommentarer og 1 løsning
fejl i header
header vej ik som jeg gerne vil have den til :( jeg har prøvet med : header("Location:admin.php"); header(\"Location:admin.php\"); header("Location: http://www.side.dk/admin.php"); hvordan kan det ellers skrives så det virker ?
eks eks.. hvad der sker er, at jeg har en menu login, skal vidre ind i admin delen, den tjekker så via koden se op kl 10.49.07 via hele filen se kl 11.27.41 om session er sat med md5 cryp er ok hvis ja for man adgang til admin delen. der kommer ingen fejl meddelser den forbliver bare i login siden, da hvad jeg tror men er ikke sikker, at session ikke huskes, da som jeg skriver i det kl 10.49.07 hvis jeg udkommentere tjekket kommer jeg ind i admin delen.
include var skrevet forkert men kan stadig ikke logge in, hvad med php.ini hvis jeg laver en phpinfo can en af jer se om der er noget der står forkert ?
hvis jeg nu ændre rettighederne på bib session bevidst for at fremtvinge fejl, skriver den ud til skærmen at man i har rettigheder for at skrive til sessions, det er jo ok, men det der undre mig er, hvis man opdatere i browseren skriver den en ny session, skal den det ? ville selv mene at den skulle beholde den samme session indtil man lukker webbrowseren, hvis jeg har ret, he ved jeg ikke om jeg har, men så ville det forklare mener jeg, at man ikke kan logge ind, fordi, når man logger ind, laver man vel en opdatering igen, ved ik om jeg er inde på noget af det rigtige ....
det der undre mig er, tidligere kørte scriptet fint, men var på en win2000 server med apache, nu flytter man det over på en linux, og så går det ged i det.
//authorized login check include("checklogin.php"); if (!isset($_SESSION["log"]) || !isset($_SESSION["pass"])) //unauthorized { //show authorization form header("Location: access_admin.php"); }
//logout? if (isset($_GET["logout"])) //logout { //show authorization form $_SESSION["log"] = ""; $_SESSION["pass"] = ""; unset($_SESSION["log"]); unset($_SESSION["pass"]); die("<script>window.location='access_admin.php';</script>"); }
//init Smarty require 'smarty/smarty.class.php'; $smarty = new Smarty; //core smarty object $smarty_mail = new Smarty; //for e-mails
if (!isset($_SESSION["current_language"]) || $_SESSION["current_language"] < 0 || $_SESSION["current_language"] > count($lang_list)) $_SESSION["current_language"] = 0; //set default language
if (isset($lang_list[$_SESSION["current_language"]]) && file_exists("./languages/".$lang_list[$_SESSION["current_language"]]->filename)) include("./languages/".$lang_list[$_SESSION["current_language"]]->filename); //include current language file else { die("<font color=red><b>ERROR: Couldn't find language file!</b></font>"); }
//connect to database db_connect(DB_HOST,DB_USER,DB_PASS) or die (db_error()); db_select_db(DB_NAME) or die (db_error());
//set Smarty include files dir $smarty->template_dir = $lang_list[$_SESSION["current_language"]]->template_path."/admin"; $smarty_mail->template_dir = $lang_list[$_SESSION["current_language"]]->template_path."/mail";
function mark_as_selected($a,$b) //required for excel import //returns " selected" if $a == $b { return !strcmp($a,$b) ? " selected" : "";
} //mark_as_selected
function get_NOTempty_elements_count($arr) //required for excel import //gets how many NOT NULL (not empty strings) elements are there in the $arr { $n = 0; for ($i=0;$i<count($arr);$i++) if (trim($arr[$i]) != "") $n++; return $n; } //get_NOTempty_elements_count
//end of functions definition
//define department and subdepartment if (!isset($_GET["dpt"])) { $dpt = isset($_POST["dpt"]) ? $_POST["dpt"] : ""; } else $dpt = $_GET["dpt"]; if (!isset($_GET["sub"])) { if (isset($_POST["sub"])) $sub = $_POST["sub"]; } else $sub = $_GET["sub"];
//get new orders count $q = db_query("select count(*) from ".ORDERS_TABLE) or die (db_error()); $n = db_fetch_row($q); $smarty->assign("new_orders_count", $n[0]);
$admin_departments = array();
// includes all .php files from includes/ dir $includes_dir = opendir("includes/admin"); $file_count = 0; while ( ($inc_file = readdir($includes_dir)) != false ) if (strstr($inc_file,".php")) { include("includes/admin/$inc_file"); $file_count++; }
if (isset($sub)) $smarty->assign("current_sub", $sub);
Koden 17/06-2007 11:27:41 kommenterer du 18/06-2007 08:51:50, hvor du nævner noget med md5 som ikke står der. Det gør der til gengæld 18/06-2007 09:43:48. Og der står der så også noget med base64_encode.
Jeg er i tvivl om hvad for noget kode, du mener der har virket, og så hvad du har nu. Har du checket at du i det hele taget rammer admin.php på noget tidspunkt?
Ja, session_start() skriver du som det første - så skal vi ikke spekulere mere på det.
<?php print .... ?> kan bruges til mange ting. Men undersøg om alle dine mærkelige test for brugernavn og password reelt bringer dig videre til admin.php
erik jeg ved det, roder i blinde da der ikke kommer nogen fejl på skærmen jeg kan forholde mig til, hvad der sker.. enten husker den ikke den cookie der bliver sat eller kan ikke læse den.
og udskift admin.php til admin2.php i dit login-script. Så kan du i hvert fald nemt se om du kommer videre. Hvis ikke, så brug masser af print til at se hvad dine variabler indeholder.
en ting mere nu hvor jeg copy resultatet ind her, lave den om på tallene her på skærmen vises det som to firkanter men på eksperten som ��
ja og... jeg ved koden men kommer stadig ik ind. jeg kan lave hvilken som helst kode med brugernavn og password, hvis jeg skriver forkert kommer den med rød skrift og fortæller det, jeg tog kun det som et eksempel, da du spørger vad man skal skrive som bruger og pass hvis det er a og b hmmm kan ik se hvad det har med problemet at gøre
Uden at sidde med koden på din server, skal det jo være gæt, helst kvalificeret, baseret på eksperimenter. Men interessant at høre, for første gang, at du rent faktisk får fejlen ud med rødt, når brugernavn/password ikke er korrekt. Så er det måske alligevel ikke der, vi skal kigge.
Men hvad om du så får kigget på forslaget 18/06-2007 17:45:55
ja det er nok mig der forklare mig for dårligt, undskyld for det, det nærmeste jeg skriver er den 17 at jeg ikke for fejlmeddelser når jeg prøver at logge ind, og mente nok jeg kan skrive en adgang rigtigt, men at jeg var sikker på det via en fejl meddelse hvis jeg skrev forkert, det har jeg ikke fortalt. jeg prøver dit forslag.
Jo, nemlig, der skal stå session_start(); - det er beviset for, at på netop den server skal det være det. Men den vil ikke udskrive "Array()" - læs lige det indlæg igen.
jammen det gør den alså erik men hvis jeg laver en base64_decode af bruger for jeg fint navnet ud, men på password skriver den noget vulapyg ud ??????????
det der sker når man laver et login, bliver navnet encode med base64 og password bliver lavet med md5 og det virker som fint nok, det der et eller andet sted går galt er decodening af enten password eller bruger, med mine test decode af bruger skriver den fint nok navn ud, jeg er så ik helt sikker på decode af md5 om jeg har det rigtigt. det tyder ikke på at pass er encode med base64 men kun med md5.
Hvis du kommer til admin.php eller admin2.php, så virker brugernavn og password, og vi behøver ikke kigge mere på det (i hvert fald ikke for funktionaliteten ... du laver en masse besvær uden at opnå større sikkerhed, som det er nu, men det er en helt anden ting)
Koden? Det betyder alle linier i alle relevante filer. Ja, det er meget. Det er også derfor jeg foreslår at du laver et minimalt eksempel. Du har allerede admin2.php
enig i at brugernavn og password virker det syntes jeg har prøvet at fortælle hele vejen, der hvor kæden springer af, der når den tjekker min adgang, så i kontrollen sker der det at den siger de to ting ikke passer, enten bruger navn eller password
hmmm det er modsigende det jeg siger, ok jeg kommer videre til admin2.php men hvis jeg bruger admin.php kommer jeg ik videre, så du har ret tjekket virker det er noget kode i admin.php der afviser, så langt så godt
hvis jeg laver et tjek af adgang via checklogin.php i admin2.php og skriver echo ud hvis det er ok tjekket, så skriver den ok, så det har ik noget med adgang at gøre kan jeg se nu. og kommer tilbage til start af indlæg hvor jeg skriver det er header problemer. da hvis jeg tager linien med header("Location: access_admin.php); s[ forbliver jeg i login billedet
så fejlen ligger i dette efter login, tjek i admin.php //authorized login check include("checklogin.php"); if (!isset($_SESSION["log"]) || !isset($_SESSION["pass"])) //unauthorized { //show authorization form header("Location: access_admin.php"); }
nej det er også to forskellige filer 19/06-2007 13:02:52 er access_admin.php og 18/06-2007 09:41:53 er admin.php den vi tester på er access_admin.php der går over i admin2.php og i begge filer står session start i toppen
hee forviret kan jeg forstå 1 9/06-2007 13:41:57 er bare en test af om jeg kan lave et array og få det ud igen og det ser udtil jeg kan. 2 jeg for ingen array ud i admin2.php
Sessioner plejer at virke når man har session_start(); øverst i alle filer, der bruger $_SESSION. Det vil jeg se, før jeg vil lede efter fejl andre steder.
ok men for jeg at vide at session open men det er når jeg går fra access_admin.php > admin2.php går fra access_admin.php i admin.php bliver jeg i access_admin.php :(
det forstår jeg ik på den ene side siger du session start skal være i top på hver side ik ? og når jeg går fra access_admin.php med session i top til admin2.php med det fra kl 15.15:39 der også har session i top,,,,, nu faldt jeg af sporet med session :)
Ja, i lige måde. Men 15.15:39 har ikke session_start() i toppen. Jeg vil gerne se eksempel på at 2 scripts, hver med session_start() i toppen, den ene sætter en session-variabel, redirecter til det andet script, som så skriver den ud.
Det er næsten verdens mindste eksempel, men alternativt kan du bruge de scripts du har. Jeg vil blot gentage, at jeg ikke vil bruge tid på at lede efter andre fejl, før jeg ksn se, at du har session_start() som det første.
det sidste script virker ikke efter hensigten da jeg i php.ini har sat autostart til on og script meddeler stadig session closed... jeg fatter ik lige hvad der sker Notice: A session had already been started - ignoring session_start() in /var/www/html/webdesign4u/admin2.php on line 2 Session was closed
nu har jeg to script der virker hvor jeg kan se session på nr 2 side der er to test fra side 1 en for hvis session cookie er acepteret. den anden hvis session id bliver skrevet efter browser stien i top 1 virker ikke 2 virker på side 2
Ja, der kunne du jo have været for 1½ dag siden. 17/06-2007 12:28:33 "minimalt eksempel, der ikke virker". Accepterer din browser cookies? Har du et link til det minimale eksempel?
Jeg tror du skal overlade pilleri php.ini til dem, der ved hvad de gør. Find den oprindelige. Dine HTTP-headers ser sådan ud
HTTP/1.1 200 OK Date: Tue, 19 Jun 2007 21:23:06 GMT Server: Apache/2.2.3 (CentOS) Set-Cookie: PHPSESSID=abuhasn55nmek0qopevmdni9je5e9kgo; expires=Tue, 19 Jun 2007 21:43:13 GMT; path=/var/www/html/cookie Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: private, max-age=216000, pre-check=216000 Last-Modified: Tue, 19 Jun 2007 15:14:47 GMT Content-Length: 168 Connection: close Content-Type: text/html; charset=UTF-8 Content-Language: dk
Og her er "path"-delen på linien "Set-Cookie" helt i skoven. Derfor vil den cookie aldrig blive sendt tilbage. Og der er heller ikke normalt en expires på en sessioncookie.
deter fordi jeg sat expire cookie til 0 det vel sige den expire når browseren lukker, før blev den smidt væk med det samme. ellers har jeg kun rettet hvor den skal smide cookien. den bruger oprendelig phpsessid.
"ellers har jeg kun rettet hvor den skal smide cookien." ... ;) ... nej, du retter i noget, du ikke ved hvad er. Start med en rigtig php.ini, og lad være med at pille for meget.
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.