jstorelv Skrevet 4. januar 2006 Del Skrevet 4. januar 2006 Har problemer med $_SESSION variabler..... Har en login.php side som setter noen $_SESSION variabler til TRUE hvis brukeren får logget inn. I andre sider sjekker jeg på disse variablene, og kjører noe kode hvis de er satt til TRUE. Hvis jeg kjører dette direkte på den serveren hvor php sidene ligger funker alt fint: Eks: www.ettellerannet.no/minside.php Men dersom jeg linker fra en annen side, så funker det ikke: Eks: www.enannenside.no/index.html som inneholder dette: <frameset cols="150,*"> <frame name="innhold" target="hoved"> <frame name="hoved" src="http://www.ettellerannet.no/minside.php"> <noframes> <body> <p>Denne siden bruker rammer, men leseren din støtter ikke disse.</p> </body> </noframes> </frameset> Håper det er noen som kan hjelpe meg med dette....... Lenke til kommentar
Ernie Skrevet 4. januar 2006 Del Skrevet 4. januar 2006 Kan tenke meg at sessions blir "slettet" når du besøker rene html-sider. Lenke til kommentar
???????? Skrevet 4. januar 2006 Del Skrevet 4. januar 2006 Sessions slettes ikke selv om du går inn på en HTML side. Jeg skjønner ikke helt, forsøker du å kjøre PHP kode i en side som heter index.html? Er i så fall serveren satt opp for dette? Og har du husket session_start()? Lenke til kommentar
jstorelv Skrevet 4. januar 2006 Forfatter Del Skrevet 4. januar 2006 Jeg kjører ikke php koden i html fila. Jeg sier jo bare at php fila skal hentes inn i frame'en. Lenke til kommentar
0lav Skrevet 4. januar 2006 Del Skrevet 4. januar 2006 Tipper du får en melding om at headeren allerede er sendt? session_start(); må stå før all annen output.. Lenke til kommentar
jstorelv Skrevet 4. januar 2006 Forfatter Del Skrevet 4. januar 2006 Får ikke noen feilmeldinger i det hele tatt..... Bruker session_start() som det første i koden. Lenke til kommentar
???????? Skrevet 4. januar 2006 Del Skrevet 4. januar 2006 Det har ikke noe å med de andre sidene å gjøre. I en fram så hentes siden "minside.php" på nytt - så problemet ligger ikke i html. I utgangspunktet er det noen muligheter: 1. Du har glemt session_start() i php filen 2. Du bruker sessionen samtidig som den settes - kan skape problemer grunnet cookie reload ol. 3. Du har en bug i scriptet ditt. Post scriptet ditt her slik at vi i alle fall har en sjans til å hjelpe deg. Lenke til kommentar
jstorelv Skrevet 4. januar 2006 Forfatter Del Skrevet 4. januar 2006 login.php: <?PHP function displayLogin() { header("WWW-Authenticate: Basic realm=\"My Website\""); header("HTTP/1.0 401 Unauthorized"); echo "<h2>Authentication Failure</h2>"; echo "The username and password provided did not work. Please reload this page and try again."; exit; } $db = mysql_connect('xxx','xxx','xxx') or die ('I cannot connect to the database because: ' . mysql_error()); mysql_select_db('xxx') or die("Couldn't select the database"); if (!isset($PHP_AUTH_USER) || !isset($PHP_AUTH_PW)) { // If username or password hasn't been set, display the login request. displayLogin(); } else { // Escape both the password and username string to prevent users from inserting bogus data. $PHP_AUTH_USER = addslashes($PHP_AUTH_USER); $PHP_AUTH_PW = md5($PHP_AUTH_PW); // Check username and password agains the database. $result1 = mysql_query("SELECT count(id) FROM users WHERE password='$PHP_AUTH_PW' AND username='$PHP_AUTH_USER' AND activated='1'") or die("Couldn't query the user-database."); $num = mysql_result($result1, 0); if (!$num) { // If there were no matching users, show the login displayLogin(); } } // All code/html below will only be displayed to authenticated users. $type=strtolower($_GET[type]); $id=strtolower($_GET[id]); if (!$_REQUEST['type']=='' and !$_REQUEST['id']==''): session_start(); $_SESSION['loggedin'] = TRUE; $query2="SELECT changeuser,changeklubb,changekrets,changeaktleder,changetrener,changedommer FROM users WHERE password='$PHP_AUTH_PW' AND username='$PHP_AUTH_USER' AND activated='1'"; $result2 = mysql_query($query2) or die("Couldn't query the user-database."); $row = mysql_fetch_row($result2); if ($row[0]): $_SESSION['changeuser'] = TRUE; endif; if ($row[1]): $_SESSION['changeklubb'] = TRUE; //echo 'Setter klubb!!'; endif; if ($row[2]): $_SESSION['changekrets'] = TRUE; endif; if ($row[3]): $_SESSION['changeaktleder'] = TRUE; endif; if ($row[4]): $_SESSION['changetrener'] = TRUE; endif; if ($row[5]): $_SESSION['changedommer'] = TRUE; endif; echo "Du er nå innlogget!<br />"; echo "<a href=../krets_klubb/$type.php?id=$id> Klikk her for å gå tilbake</a>"; endif; ?> script som benytter $_SESSION variablene: <?php session_start(); function email($user, $domain) { return "<nobr><a href=../email/redirect-mailto.php?u=$user&d=$domain>$user<img src=../images/@.gif align=absbottom border=0 alt=\"@\">$domain</a></nobr>"; } include '../mysql/config.php'; include '../mysql/opendb.php'; $krets=strtolower($_GET[krets]); $kretsid=strtolower($_GET[id]); /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18*/ if ($krets=='' and $kretsid==''): $query = "select `Kretsnavn`, `Mail`, `Post 1`, `Adresse 1`, `Adresse 2`, `Postnummer`, `Tlf Priv`, `Tlf Jobb`, `Mobil`, `Fax`, `co`, `Post 2`, `co Adresse 1`, `co Postnummer`, `co Tlf Priv`, `co Tlf Jobb`, `co Mobil`, `co Fax`, `id` from krets"; elseif ($krets!='' and $kretsid==''): $query = "select `Kretsnavn`, `Mail`, `Post 1`, `Adresse 1`, `Adresse 2`, `Postnummer`, `Tlf Priv`, `Tlf Jobb`, `Mobil`, `Fax`, `co`, `Post 2`, `co Adresse 1`, `co Postnummer`, `co Tlf Priv`, `co Tlf Jobb`, `co Mobil`, `co Fax`, `id` from krets where kretsnavn like '%".$krets."%'"; elseif ($krets=='' and $kretsid!=''): $query = "select `Kretsnavn`, `Mail`, `Post 1`, `Adresse 1`, `Adresse 2`, `Postnummer`, `Tlf Priv`, `Tlf Jobb`, `Mobil`, `Fax`, `co`, `Post 2`, `co Adresse 1`, `co Postnummer`, `co Tlf Priv`, `co Tlf Jobb`, `co Mobil`, `co Fax`, `id` from krets where id = '".$kretsid."'"; endif; //echo "Verdi:"; //echo $_SESSION['loggedin']; if($result = mysql_query($query,$link)): $row_cnt=mysql_num_rows($result); if ($row_cnt == "1"): $row=mysql_fetch_row($result); $query_postnummer = "Select Poststed from postnummer where postnummer = '".$row[5]."'"; if($result_postnummer = mysql_query($query_postnummer,$link)): $row_postnummer=mysql_fetch_row($result_postnummer); endif; $pos_alpha = strpos($row[1], '@'); $len_mail = strlen($row[1]); $first_part = substr($row[1],0,$pos_alpha); $second_part = substr($row[1],$pos_alpha+1,$len_mail-1); echo "<html>"; echo "<head>"; echo "<title>Info om $row[0]</title>"; echo "</head>"; echo "<body background='http://www.bueskyting.no/images/graamur.gif'>"; echo "<table border=1 cellpadding=0 bordercolor=#111111 width=700 cellspacing=0 rules=none>\n"; echo "<tr>"; echo "<td width=38%><b>$row[0]</b></td>\n"; echo "<td width=9%> </td>"; echo "<td colspan=2 width=53%>".email($first_part,$second_part)."</td>"; echo "</tr>"; echo "<tr>"; echo "<td width=38%> </td>"; echo "<td width=9%> </td>"; echo "<td width=15%> </td>"; echo "<td width=38%> </td>"; echo "</tr>"; echo "<tr>"; echo "<td width=38%> </td>"; echo "<td width=9%> </td>"; echo "<td width=15%>Privat</td>"; echo "<td width=38%>Jobb</td>"; echo "</tr>"; echo "<tr>"; if ($row[2]): echo "<td width=38%>*$row[3]</td>"; else: echo "<td width=38%>$row[3]</td>"; endif; echo "<td width=9%>Tlf:</td>"; echo "<td width=15%>$row[6]</td>"; echo "<td width=38%>$row[7]</td>"; echo "</tr>"; echo "<tr>"; echo "<td width=38%>$row[4]</td>"; echo "<td width=9%>Mobil:</td>"; echo "<td width=15%>$row[8]</td>"; echo "<td width=38%> </td>"; echo "</tr>"; echo "<tr>"; echo "<td width=38%>$row[5] $row_postnummer[0]</td>"; echo "<td width=9%>Fax:</td>"; echo "<td width=15%>$row[9]</td>"; echo "<td width=38%> </td>"; echo "</tr>"; echo "<tr>"; echo "<td width=38%> </td>"; echo "<td width=9%> </td>"; echo "<td width=15%> </td>"; echo "<td width=38%> </td>"; echo "</tr>"; if ($row[10] != '' or $row[12] != '' or $row[13] != ''): $query_postnummer2 = "Select Poststed from postnummer where postnummer = '".$row[13]."'"; if($result_postnummer2 = mysql_query($query_postnummer2,$link)): $row_postnummer2=mysql_fetch_row($result_postnummer2); endif; echo "<tr>"; if ($row[11] == '1'): echo "<td width=38%>*$row[10]</td>"; else: echo "<td width=38%>$row[10]</td>"; endif; echo "<td width=9%>Tlf:</td>"; echo "<td width=15%>$row[14]</td>"; echo "<td width=38%>$row[15]</td>"; echo "</tr>"; echo "<tr>"; echo "<td width=38%>$row[12]</td>"; echo "<td width=9%>Mobil:</td>"; echo "<td width=15%>$row[17]</td>"; echo "<td width=38%> </td>"; echo "</tr>"; echo "<tr>"; echo "<td width=38%>$row[13] $row_postnummer2[0]</td>"; echo "<td width=9%>Fax:</td>"; echo "<td width=15%>$row[17]</td>"; echo "<td width=38%> </td>"; echo "</tr>"; echo "<tr>"; echo "<td width=38%> </td>"; echo "<td width=9%> </td>"; echo "<td width=15%> </td>"; echo "<td width=38%> </td>"; echo "</tr>"; mysql_free_result($result_postnummer2); endif; echo "<tr>"; if ($_SESSION['loggedin'] && $_SESSION['changekrets']): echo "<td width=38%><a href=krets_update.php?id=$row[18]>Endre</a></td>"; else: echo "<td width=38%> </td>"; endif; echo "<td width=9%> </td>"; echo "<td width=15%> </td>"; echo "<td width=38%> </td>"; echo "</tr>"; echo "<tr>"; echo "<td width=38%><b>Klubber</b></td>"; echo "<td width=9%> </td>"; echo "<td width=15%> </td>"; echo "<td width=38%> </td>"; echo "</tr>"; $query_klubb = "Select klubbnavn,id from klubb where kretsid='".$row[18]."' order by klubbnavn"; if($result_klubb = mysql_query($query_klubb,$link)): while ($row_klubb = mysql_fetch_row($result_klubb)) { echo "<tr>"; echo "<td width=38%><a href=klubb.php?id=$row_klubb[1]>$row_klubb[0]</a></td>"; echo "<td width=9%> </td>"; echo "<td width=15%> </td>"; echo "<td width=38%> </td>"; echo "</tr>"; } mysql_free_result($result_klubb); endif; echo "<tr>"; echo "<td width=38%> </td>"; echo "<td width=9%> </td>"; echo "<td width=15%> </td>"; echo "<td width=38%> </td>"; echo "</tr>"; echo "<tr>"; echo "<td width=38%><b>Dommere</b></td>"; echo "<td width=9%> </td>"; echo "<td width=15%> </td>"; echo "<td width=38%> </td>"; echo "</tr>"; echo "<tr>"; if ($_SESSION['loggedin'] && $_SESSION['changedommer']): echo "<td width=38%><b><font size=\"2\">Navn</font></td>"; echo "<td width=9%> </td>"; echo "<td width=15%> </td>"; echo "<td width=38%> </td>"; else: echo "<td width=38%><b><font size=\"2\">Navn</font></td>"; echo "<td width=9%><b><font size=\"2\">Tlf</font></td>"; echo "<td width=15%><b><font size=\"2\">Klubb</font></td>"; echo "<td width=38%><b> </td>"; endif; echo "</tr>"; $query_dommer = "Select navn,tlf,klubbid,id from dommer where kretsid='".$row[18]."' order by klubbid"; if($result_dommer = mysql_query($query_dommer,$link)): while ($row_dommer = mysql_fetch_row($result_dommer)) { $query_dommerklubb = 'Select Klubbnavn from klubb where id='.$row_dommer[2]; if($result_dommerklubb = mysql_query($query_dommerklubb,$link)): $row_dommerklubb = mysql_fetch_row($result_dommerklubb); echo "<tr>"; if ($_SESSION['loggedin'] && $_SESSION['changedommer']): echo "<td width=38%>$row_dommer[0]</td>"; echo "<td width=9%> </td>"; echo "<td width=15%><a href=update_dommer.php?id=$row_dommer[3]>Endre</a></td>"; echo "<td width=38%><a href=delete_dommer.php?id=$row_dommer[3]>Slett</a></td>"; //echo "<td width=38%> </td>"; /* echo "<td width=80%>$row_trener[0]</td>"; echo "<td width=10%><a href=trener_update.php?id=$row_trener[1]>Endre</a></td>"; echo "<td width=10%><a href=trener_delete.php?id=$row_trener[1]>Slett</a></td>";*/ else: echo "<td width=38%>$row_dommer[0]</td>"; echo "<td width=9%> </td>"; echo "<td width=15%>$row_dommer[1]</td>"; echo "<td width=38%>$row_dommerklubb[0]</td>"; endif; echo "</tr>"; else: echo "<tr>"; if ($_SESSION['loggedin'] && $_SESSION['changedommer']): echo "<td width=38%>$row_dommer[0]</td>"; echo "<td width=9%> </td>"; echo "<td width=15%><a href=update_dommer.php?id=$row_dommer[3]>Endre</a></td>"; echo "<td width=38%><a href=delete_dommer.php?id=$row_dommer[3]>Slett</a></td>"; //echo "<td width=38%> </td>"; /* echo "<td width=80%>$row_trener[0]</td>"; echo "<td width=10%><a href=trener_update.php?id=$row_trener[1]>Endre</a></td>"; echo "<td width=10%><a href=trener_delete.php?id=$row_trener[1]>Slett</a></td>";*/ else: echo "<td width=38%>$row_dommer[0]</td>"; echo "<td width=9%> </td>"; echo "<td width=15%>$row_dommer[1]</td>"; echo "<td width=38%> </td>"; endif; echo "</tr>"; endif; } mysql_free_result($result_dommer); endif; echo "</table>"; echo "<b>* = all post hit</b><br />"; if (!$_SESSION['loggedin']): echo "<a href=../mysql/login.php?type=krets&id=$row[18]>Logg inn for å kunne endre klubber/kretser.</a></td>"; else: echo '<a href=../mysql/logout.php?type=krets&id='.$row[18].'>Logg ut.</a></td>'; endif; echo "</body>"; echo "</html>"; mysql_free_result($result_postnummer); else: echo "<html>"; echo "<head>"; echo "<title>Feil!</title>"; echo "</head>"; echo "<body background='http://www.bueskyting.no/images/graamur.gif'>"; echo"Man må angi en krets!<br />"; echo "</body>"; echo "</html>"; endif; /* Frigör minnet som SQL frågan reserverade */ mysql_free_result($result); endif; /* Avsluta anslutningen */ mysql_close($link); ?> Når jeg kaller det siste scriptet direkte fra www.ettellerannet.no/minside.php, så funker det helt fint, men fra www.enannenside.no/index.html som har www.ettellerannet.no/minside.php inni en frame, så funker det ikke. Lenke til kommentar
jstorelv Skrevet 4. januar 2006 Forfatter Del Skrevet 4. januar 2006 (endret) Har testet litt mere..... Har lagt denne koden i følgende filer: www.enannenside.no/test.html og www.ettellerannet.no/test.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <title>Ny side 2</title> </head> <frameset cols="150,*"> <frame name="innhold" target="hoved"> <frame name="hoved" src="http://www.ettellerannet.no/krets_klubb/krets.php?id=1"> <noframes> <body> <p>Denne siden bruker rammer, men leseren din støtter ikke disse.</p> </body> </noframes> </frameset> </html> Når jeg kjører www.ettellerannet.no/test.html og prøver å logge inn oppfører siden seg som den skal. Når jeg kjører www.enannenside.no/test.html og prøver å logge inn oppfører siden seg som om jeg ikke har logget inn. edit: trykkleif..... Endret 4. januar 2006 av jstorelv Lenke til kommentar
???????? Skrevet 4. januar 2006 Del Skrevet 4. januar 2006 Forsøk dette: like etter session_start() så legger du til var_dump($_SESSION); og åpner den på begge måtene som du nevner ovenfor. Gir denne linjen et resultat i begge tilfeller? Lenke til kommentar
???????? Skrevet 4. januar 2006 Del Skrevet 4. januar 2006 Beklager så mye, så ikke at du forsøkte å bruke to forskjellige domener. Dette vil skape problemer. Normalt sett så kan du sette en session går over til andre sider, og så komme tilbake igjen - og sessionen er fortsatt der, men i dette tilfellet så blir det da ikke sendt de samme variablene siden du åpner et annet domene. Hvorfor har du dette på to forskjellige domener? Lenke til kommentar
jstorelv Skrevet 4. januar 2006 Forfatter Del Skrevet 4. januar 2006 Jeg har 3 domener........ På det offisielle domenet har jeg ikke støtte for php og mysql, derfor benytter jeg et annet domene for de sidene som trenger det frem til domenet er flyttet. Domene A er det offisielle domenet som ikke støtter php og mysql Domene B er mitt private domene som jeg har kjørt php sidene på til nå. Domene C er et annen domene som eies av samme eier som domene a, og som støtter php og mysql. Jeg tester litt mere nå. Lenke til kommentar
jstorelv Skrevet 4. januar 2006 Forfatter Del Skrevet 4. januar 2006 Har laget et lite test scenario. test.php: <?php session_start(); var_dump($_SESSION); echo '<br />'; if (!$_SESSION['loggedin']): echo "Du er IKKE innlogget!!!!<br />"; echo "<a href=login.php>Logg inn.</a><br />"; else: echo "Du er innlogget!!!!<br />"; echo '<a href=logout.php>Logg ut.</a><br />'; endif; ?> login.php: <?PHP function displayLogin() { header("WWW-Authenticate: Basic realm=\"My Website\""); header("HTTP/1.0 401 Unauthorized"); echo "<h2>Authentication Failure</h2>"; echo "The username and password provided did not work. Please reload this page and try again."; exit; } if (!isset($PHP_AUTH_USER) || !isset($PHP_AUTH_PW)) { // If username or password hasn't been set, display the login request. displayLogin(); } else { // Escape both the password and username string to prevent users from inserting bogus data. $PHP_AUTH_USER = addslashes($PHP_AUTH_USER); $PHP_AUTH_PW = md5($PHP_AUTH_PW); } // All code/html below will only be displayed to authenticated users. $type=strtolower($_GET[type]); $id=strtolower($_GET[id]); session_start(); $_SESSION['loggedin'] = TRUE; echo "Du er nå innlogget!<br />"; echo "<a href=test.php> Klikk her for å gå tilbake</a>"; ?> logout.php <?php session_start(); $_SESSION = array(); if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } session_destroy(); // now that the user is logged out, // go to login page or whatever //header('Location: $type.php?id=$id'); $type=strtolower($_GET[type]); $id=strtolower($_GET[id]); echo '<html>'; echo '<head>'; echo '<meta http-equiv="Refresh" content="4;url=test.php">'; echo '</head>'; echo '</html>'; ?> test.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <title>Ny side 2</title> </head> <frameset cols="150,*"> <frame name="innhold" target="hoved"> <frame name="hoved" src="http://DomeneC/test/test.php"> <noframes> <body> <p>Denne siden bruker rammer, men leseren din støtter ikke disse.</p> </body> </noframes> </frameset> </html> test2.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <title>Ny side 2</title> </head> <frameset cols="150,*"> <frame name="innhold" target="hoved"> <frame name="hoved" src="http://DomeneB/nbf/test/test.php"> <noframes> <body> <p>Denne siden bruker rammer, men leseren din støtter ikke disse.</p> </body> </noframes> </frameset> </html> test.html og test2.html ligger på DomeneA Hvis jeg kjører test.html og logger inn, så blir var_dump'en dette: array(0) { } Hvis jeg kjører test2.html og logger inn, s blir var_dump'en dette: array(1) { ["loggedin"]=> &bool(true) } Ser også at linkene i test2.html blir slik: http://DomeneB/test/login.php?PHPSESSID=3c...1e175e9498fe402 Mens i test.html blir de slik: http://DomeneC/test/login.php Lenke til kommentar
jstorelv Skrevet 4. januar 2006 Forfatter Del Skrevet 4. januar 2006 Kan det kanskje være session.use_trans_sid som er satt til Off på DomeneC og On på DomeneB?? Lenke til kommentar
???????? Skrevet 4. januar 2006 Del Skrevet 4. januar 2006 Problemet er uansett at det i noen tilfeller vil oppstå en feil der, og dersom du klarer å finne en løsning nå så kan den forsvinne dersom en av hostene oppdaterer PHP eller php.ini. Jeg vil enkelt nok anbefale deg å flytte alt til en host, eventuelt skaffe en ny host som tilbyr hosting av flere domener på samme konto. Ser ikke hensikten med å bruke tid på dette problemet når du enkelt kan løse det ved å bytte host. Hvor feilen kan ligge er ikke lett å si. Problemet virker å være at PHP servere inne mottar cookien når du forsøker å loade en side i en frame - forsøk å legg til en funksjon som dumper cookien på serveren slik at du kan se hvis det eventuelt er problemet. For å løse problemet så må du begynne der den kan oppstå. Får du ikke noe logisk ut av cookien så kan du skrive et script som registrerer hele header request som browseren din sender. Lenke til kommentar
jstorelv Skrevet 4. januar 2006 Forfatter Del Skrevet 4. januar 2006 Jeg vil enkelt nok anbefale deg å flytte alt til en host, eventuelt skaffe en ny host som tilbyr hosting av flere domener på samme konto. Ser ikke hensikten med å bruke tid på dette problemet når du enkelt kan løse det ved å bytte host. 5385035[/snapback] Det er bare det at jeg ikke bare kan flytte alt som ligger der over på ny host. Må gjøre en del omprogrammering mm. Også skal man ha tid til alt også. Jobb, familie osv osv..... Lenke til kommentar
???????? Skrevet 5. januar 2006 Del Skrevet 5. januar 2006 Dette er kanskje litt sent å si nå, men da husker du det kanskje til fremtiden. PHP er et kraftig språk som er plattform uavhengig - husk derfor alltid å skrive koden din på samme måte slik at den er protabel. Skulle det finnes variabler som er knyttet spesifikk mot en server så plasser disse alltid i en config fil slik at det enkelt kan byttes ut. Når det er sagt så må du nesten begynne feilsøkningen slik jeg skrev i posten over. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå