webForumDet fria alternativet

Session mellan funktioner

41 svar · 739 visningar · startad av web00132

web00132Medlem sedan maj 2001797 inlägg
#1

Jag har ett sessionsproblem. På min site kommer man först till en inloggningssida där man skriver in loginnamn och så, när man submittat körs sedan lite kod som kollar om användarnamn o lösen stämmer, gör den det så vill jag skapa en session och lite sessionsvariabler och sedan skicka vidare användaren till en startsida. Enkelt!
Mitt problem är att all kod ligger i funktioner i en och samma fil. Det enda som händer när man loggar in osv är att man skickas till en annan funktion i samma fil och då vill inte min session hänga med.
Hur gör man detta? Måste man köra session_start i varje funktion? Hur går det till?

ps. Jag har ställt ngn liknande fråga förut men fortfarande inte lyckats lösa det. ds.

ThACRoWMedlem sedan dec. 2001314 inlägg
#2

Kan du inte visa lite kod... ?

2basMedlem sedan juni 2001181 inlägg
#3

Hmmm, sessions mellan funktioner??

Menare du att du inte kommer åt sessionvariablerna inne i funktionen. Det beror på att variablerna kanske inte är globala.
Prova att lägga till

global $variabel1; i början av funktionen, så borde variabeln vara tillgänglig i den funktionen.

typ:

function Sum()
{
    global $a, $b;

    $b = $a + $b;
}
web00132Medlem sedan maj 2001797 inlägg
#4

Hmm, verkar inte fungera så bra.
Så här har jag gjort:

- Efter inloggningen startar en session..

session_start();
session_register("blnValidUser");
session_register("name");
$blnValidUser = true;
$name = $HTTP_POST_VARS[login];
global $blnValidUser;
global $name;
header("location: index.php?loggedin=true");

- Sedan skickas man till adressen ovan..

elseif ($loggedin == true)
{
	ShowStart();
}

- Till sist hamnar man här..

function ShowStart()
{
	Print "Nu är du inloggad ".$name."!";
}

I name-variabeln visas tyvärr ingenting och det är det som är mitt problem.

ThACRoWMedlem sedan dec. 2001314 inlägg
#5

Prova kalla variablen så här istället:

function ShowStart()
{
	Print "Nu är du inloggad ".$_SESSION[name]."!";
}
MatteMedlem sedan aug. 20002 975 inlägg
#6

Du bör ha "fnuttar" i arrayindexet. Prova med:

$name = $HTTP_POST_VARS['login'];

web00132Medlem sedan maj 2001797 inlägg
#7

Name-variabeln får ett värde genom HTTP_POST.. osv, det är inte det som är problemet, och $_SESSION-grejen fungerar inte heller.

MatteMedlem sedan aug. 20002 975 inlägg
#8

Nytt försök:

function ShowStart()
{
  global $name;
  Print "Nu är du inloggad ".$name."!";
}
web00132Medlem sedan maj 2001797 inlägg
#9

Tack för hjälpen men det fungerar bara inte. Ngt annat förslag??

TimMedlem sedan jan. 2002115 inlägg
#10

Det beror på vad för php version du har, dvs om du har register_globals på eller av. Ifall dom är av så tror jag det här kan fungera bättre.

session_start();
$_SESSION["blnValidUser"] = "true";
$_SESSION["name"] = $_POST["login"];
header("location: index.php?loggedin=true");

function ShowStart()
{
Print "Nu är du inloggad". $_SESSION["name"]."!";
}

web00132Medlem sedan maj 2001797 inlägg
#11

Nope, det vill sig inte.

ThACRoWMedlem sedan dec. 2001314 inlägg
#12

Stöder äns din PHP version Sessioner? ;)

web00132Medlem sedan maj 2001797 inlägg
#13

Eh, jag antar det.
Jag kör:
Apache/1.3.17 (Unix) FrontPage/4.0.4.3 PHP/4.0.4pl1

TimMedlem sedan jan. 2002115 inlägg
#14

Jag föreslår att du uppgraderar PHP.

$_SESSION[] metoden är ny från och med ver. 4.1.1 och uppåt.

SPiNMedlem sedan mars 20007 896 inlägg
#15

Du ska inte behöva sätta $_SESSION[] till global, de är det automagiskt. Testa det här:

<?php
session_start ();

$blnValidUser = true;
$userName = "Namnet";

session_register ( "blnValidUser" );
session_register ( "userName" );

header ( "sida2.php" );
?>

Sida2.php:

<?php
session_start (); // Kan det bero på att du har glömt denna?

if ( $_SESSION[ 'blnValidUser' ] ) {
     echo "Inloggad";
}
else {
     echo "Inte inloggad";
}
?>
MatteMedlem sedan aug. 20002 975 inlägg
#16

Nu är ju SPIN våran store PHP-guru så jag har väl missuppfattat det hela. Som jag har uppfattat manualen så ska man om man har register_globals=on använda session_register() och om man har register_globals=off använda $_SESSION[] alternativt i äldre versioner $HTTP_SESSION_VARS[].
Så är det i allafall när jag har testat på 4.0.6; är register_globals på så funkar det inte riktigt med $HTTP_SESSION_VARS och tvärtom är register_globals av så fungerar det inte alls med session_register(). Men det kanske är annorlunda i 4.1.

web00132Medlem sedan maj 2001797 inlägg
#17

Puh.. ok. Tyvärr kan jag inte bestämma så mkt vilken PHP-version som finns på servern jag jobbar mot men jag har installerat senaste PHP-versionen hemma nu.

Det funkar om jag lägger alla funktioner i olika filer men det är ju precis det jag inte vill, jag vill ha allt i en och samma fil.
Frågan är då t ex: måste jag skriva session_start högst upp i filen fast den ska starta i min Login-funktion?

MatteMedlem sedan aug. 20002 975 inlägg
#18

Som du själv beskriver det så verkar ju själva session-hanteringen fungera eftersom det fungerar med olika filer. Då kommer vi tillbaka till ursprungsfrågan du ställde: hur får man det att fungera i en function. Själv har jag inte tid att testa mig fram hur du ska gå tillväga, men en "fuskväg" skulle ju kunna vara att ersätta:

elseif ($loggedin == true)
{
	ShowStart();
}

och

function ShowStart()
{
	Print "Nu är du inloggad ".$name."!";
}

med

elseif ($loggedin == true)
{
	Print "Nu är du inloggad ".$name."!";
}

Sedan till frågan om session_start(). Med den php-versionen du har att tillgå så är troligtvis register_globals satt till on. Som jag har läst manualen så är det inte nödvändigt att använda session_start när man använder session_register (men det är dock en god vana att göra det), och det fungerar utan session_start på den php-version jag har på mitt webbhotell (4.0.4pl1).

web00132Medlem sedan maj 2001797 inlägg
#19

Nu har jag testat alla förslag jag fått men sessionsvariabeln vill inte följa med.

if(md5($password) == $HTTP_POST_VARS[pass])
{
	session_start();
	$blnValidUser = true;
	$name = $l;
	session_register("blnValidUser");
	session_register("name");
//	if (isset($name))
//	{
//		print $name;
//	}
	header("location: index.php?loggedin=true");
}

Om jag tar bort kommenterar in if-satsen(och kommenterar ut header-grejen) här ovan skriver den ut rätt värde(name-variabeln). Om jag låter det stå som det gör nu hamnar man här:

elseif ($loggedin == true)
{
	session_start();
	Print "Nu är du inloggad ".$name."!";
}

Då skrivs inte name-variabeln ut. Det funkar inte hur jag än gör! Jag blir galen!

MatteMedlem sedan aug. 20002 975 inlägg
#20

Prova det här:

elseif ($loggedin == true)
{
	session_start();
	session_register("name");
	Print "Nu är du inloggad ".$name."!";
}
135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)