10. marts 2004 - 18:55Der er
14 kommentarer og 1 løsning
SESSION virker med "a href" men ikke med header(location: xxx)
Titel siger vel nærmest det meste.
Hvis jeg skifter fra side til side med et "ordinært" link i koden med <a href="xx.php">xx</a> virker mine sessions, men hvis jeg i stedet bruger header(location: xx.php) kommer de ikke med.
Kører på Windows server, med IIS 5.0. Har sat session.save_path til noget andet end standard, og register_globals til on.
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.
Slettet bruger
10. marts 2004 - 19:24#1
Måske vil det hjælpe at skrive exit(); efter header-kaldet.
Desværre - det gør det ikke. Siden loades godt nok, - altså bliver sendt til den rigtige side. Det "eneste" der ikke virker, er at sessions ikke bliver "sendt med".
Har session_start på xx.php, og siden xx.php virker jo godt nok, hvis der skiftes til denne side via et almindeligt <a href> link.
Synes godt om
Slettet bruger
10. marts 2004 - 19:36#3
Du laver ikke noget, der skifter til en anden virtuel server, vel?
Jeg har selv et login-script, der "roder" lidt med sessions for derefter at sende tilbage til forsiden. Det virker fint.
<?php ob_start("ob_gzhandler"); session_start();
$goback=FALSE; if (!isset($_SESSION['loggedIn'])){$goback=TRUE;} if ($_SESSION['loggedIn']){$goback=TRUE;} if ((!isset($_POST['username'])) || (empty($_POST['username'])) ){$goback=TRUE;} if ((!isset($_POST['password'])) || (empty($_POST['password'])) ){$goback=TRUE;}
$result=mysql_query("SELECT * FROM users WHERE username='{$username}' AND password='$password' AND mailconfirm='yes'"); // Test for valid login if (mysql_num_rows($result)==1) { $row=mysql_fetch_assoc($result); mysql_free_result($result);
$result=mysql_query("SELECT userid FROM candidates WHERE userid='{$row['userid']}'"); $_SESSION['isCandidate']=(mysql_num_rows($result)==1);
$_SESSION['loggedIn']=TRUE; $_SESSION['admin']=($row['permissions']=='admin'); $_SESSION['monitor']=($_SESSION['admin'] || $row['permissions']=='monitor'); $_SESSION['userid']=$row['userid']; $_SESSION['username']=htmlentities(stripslashes($username)); header("Location: index.php"); } else {$_SESSION['warning']="<p>Something went wrong: either you mistyped your username or password, or you forgot to confirm your email address.</p>";} header("Location: index.php");
Nej - det hele kører på én server. Side 1 (login) ligger i en folder, hvorimod side 2 ligger i roden. Så det bliver header('location: ../xx.php')
Kører dit script også på Win-server mv.?
Synes godt om
Slettet bruger
11. marts 2004 - 02:09#5
Nej, både min server og min desktop kører Debian, så jeg har ikke testet min kode på en Win-server. Hvis din kode gør nogenlunde det samme som min, kan jeg dog ikke se, hvorfor det ikke skulle virke.
$sql = mysql_query(" SELECT * FROM login WHERE username='".addslashes($_POST['user'])."' && password='".addslashes($_POST['pass'])."' ") or die(mysql_error());
-- "side 2" (index.php) -- require('system/list.php'); $data = array(); $sql = mysql_query("SELECT * FROM topkategori ORDER BY beskrivelse ") or die(mysql_error());
session_start(); if ($_SESSION["logon"]){ echo 'Du er logget ind som '.$_SESSION["brugernavn"]; }
<html> ...
--- Side 1 kaldes fra den form hvor bruger har indtastet brugernavn + passw. Den del fungerer fint nok.
Synes godt om
Slettet bruger
11. marts 2004 - 13:09#7
Selve din kode ser ganske fornuftig ud, så jeg gætter mest nu.
Prøv at lave denne linie om til at bruge en adresse, som er relativ til webroden.
header('Location: ../index.php');
Hvis jeg forstår dig korrekt, så skal den se således ud:
header('Location: /index.php');
Noget andet er, at nogle systemer vistnok har problemer med at oprette en cookie samtidig med at de redirecter - eller også er det nogle browsere, der ikke kan håndtere begge dele på en gang, og PHP forsøger vistnok ikke at oprette session-cookien før der reelt bliver gemt noget i brugerens session. Hvis dette er problemet, kan det måske løses ved at have noget i denne stil lige efter session_start(); i index.php
if ( (!isset($_SESSION['logon'])){$_SESSION['logon']=FALSE;}
Så skulle sessionen blive oprettet og gemt allerede når brugeren kommer ind på siden.
Pas forresten på, da du tilsyneladende udskriver 'Du er logget ind som '-strengen før selve din HTML-blok, og browsere bør derfor slet ikke vise den tekst.
Synes godt om
Slettet bruger
11. marts 2004 - 13:10#8
Hov, der var en ( for meget. Linien skulle se således ud:
if (!isset($_SESSION['logon'])){$_SESSION['logon']=FALSE;}
--> SESSION LOST ON HEADER REDIRECT (CGI on IIS 5.0)
I realize there are numerous scattered posts on this issue, but I would like to add my 2¢ since it took me a whole day and a download of the LiveHTTPHeaders Mozilla plugin to figure it out.
On the **CGI** version of PHP on IIS 5.0/Windows 2000, the following code will not work as expected:
PROBLEM: All session data is lost after a header redirect from the first page on which the session is initialized. The problem is, the PHPSESSID cookie is not being sent to the browser (ANY browser, IE or Mozilla) on the initial session page with the header("Location: ...") redirect. This is unrelated to client cookie settings - the set-cookie: header just isn't sent.
SOLUTION: I was able to remedy the problem by switching to the ISAPI DLL version. This seems to be an MS/IIS bug, NOT a PHP bug - go figure. I hope this saves you some headaches especially with your user authentication scripts!! -->
Men menes der med at skifte til ISAPI DLL version? Det har jeg ikke kendskab til hvad er / hvordan.
Synes godt om
Slettet bruger
11. marts 2004 - 15:21#11
Det var netop denne type problem, som if(!isset( ..)-linien på startsiden var designet til at skulle løse. Den skulle gøre, at der ikke bliver sat en cookie og redirectet på samme tid.
Kører du PHP som CGI? Eller har du fortalt IIS, at den skal bruge en DLL?
Hmmm... Dét får jeg ikke til at virke, sådan lige umiddelbart. Altså at skifte til isapi versionen. Kan tænke mig at det er fordi jeg i sin tid har installeret via den automatiske procedure der findes, og i dokumentationen til den står at den kun understøtter CGI. Så det må blive noget med en helt ny installation af php. Og det "orker" jeg ikke lige nu. Det jeg er ved at lave er også primært til "internt" brug, og så kan de to personer der skal bruge det blive nødt til at finde sig i at skulle klikke på et link i stedet for at blive ledt direkte tilbage.
Men foreløbig mange tak for indsatsen sandbox. Jeg vender nok / måske tilbage, hvis jeg på et tidspunkt får opdateret php på serveren. Smid et svar hvis du vil have point.
Synes godt om
Slettet bruger
12. marts 2004 - 00:18#15
Kommer her.
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.