Gå til innhold

Problemer med sessions


Anbefalte innlegg

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
Videoannonse
Annonse

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

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%>&nbsp</td>";
 	echo "<td colspan=2 width=53%>".email($first_part,$second_part)."</td>";
 echo "</tr>";
 echo "<tr>";
 	echo "<td width=38%>&nbsp</td>";
 	echo "<td width=9%>&nbsp</td>";
 	echo "<td width=15%>&nbsp</td>";
 	echo "<td width=38%>&nbsp</td>";
 echo "</tr>";
 echo "<tr>";
 	echo "<td width=38%>&nbsp</td>";
 	echo "<td width=9%>&nbsp</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%>&nbsp</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%>&nbsp</td>";
 echo "</tr>";
 echo "<tr>";
 	echo "<td width=38%>&nbsp</td>";
 	echo "<td width=9%>&nbsp</td>";
 	echo "<td width=15%>&nbsp</td>";
 	echo "<td width=38%>&nbsp</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%>&nbsp</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%>&nbsp</td>";
 	echo "</tr>";
 	echo "<tr>";
   echo "<td width=38%>&nbsp</td>";
   echo "<td width=9%>&nbsp</td>";
   echo "<td width=15%>&nbsp</td>";
   echo "<td width=38%>&nbsp</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%>&nbsp</td>";
 endif;
 	echo "<td width=9%>&nbsp</td>";
 	echo "<td width=15%>&nbsp</td>";
 	echo "<td width=38%>&nbsp</td>";
 echo "</tr>";
 echo "<tr>";
 	echo "<td width=38%><b>Klubber</b></td>";
 	echo "<td width=9%>&nbsp</td>";
 	echo "<td width=15%>&nbsp</td>";
 	echo "<td width=38%>&nbsp</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%>&nbsp</td>";
   	echo "<td width=15%>&nbsp</td>";
   	echo "<td width=38%>&nbsp</td>";
   echo "</tr>";
 	}
 	mysql_free_result($result_klubb);
 endif;
 echo "<tr>";
   	echo "<td width=38%>&nbsp</td>";
   	echo "<td width=9%>&nbsp</td>";
   	echo "<td width=15%>&nbsp</td>";
   	echo "<td width=38%>&nbsp</td>";
 echo "</tr>";
 echo "<tr>";
   	echo "<td width=38%><b>Dommere</b></td>";
   	echo "<td width=9%>&nbsp</td>";
   	echo "<td width=15%>&nbsp</td>";
   	echo "<td width=38%>&nbsp</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%>&nbsp</td>";
       echo "<td width=15%>&nbsp</td>";
       echo "<td width=38%>&nbsp</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>&nbsp</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%>&nbsp</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%>&nbsp</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%>&nbsp</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%>&nbsp</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%>&nbsp</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%>&nbsp</td>";
       echo "<td width=15%>$row_dommer[1]</td>";
       echo "<td width=38%>&nbsp</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

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 av jstorelv
Lenke til kommentar

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

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

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

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
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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...