login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[Smarty] problemen met sessies

Offline Supertje80 - 16/04/2010 11:10
Avatar van Supertje80Nieuw lid Ik werk sinds kort met Smarty. Nu loop ik tegen het volgende aan:

ik heb een inlogformulier waarbij ik na het inloggen een sessie maak met 'n waarde als de invoer klopt. In mijn .tpl wil ik kijken of er ingelogd is (of de sessie gevuld is), zodat niet het inlogform wordt getoond, maar de tekst dat er ingelogd is.
Vervolgens kan er uitgelogd worden, waar ik een $_GET['actie'] maak als er wordt uitgelogd. Is $_GET['actie'] loguit, wordt de sessie geleegd. Maar het .tpl houdt de sessie waarde vast van na het inloggen. Hierdoor kan ik dus niet inloggen.

Als ik op de index.php pagina kijk en de sessie echo na het uitloggen is deze leeg. In de template heeft deze nog 'n waarde. Hoe kan dat? Iemand advies?

Dit is de template if:
{if $smarty.session.login == ""}
het formulier
{else}
bevestiging dat er ingelogd is
{/if}

13 antwoorden

Gesponsorde links
Offline Mikee - 16/04/2010 11:58
Avatar van Mikee Nieuw lid session_start(); boven aan je pagina zetten direct na de php tags.
Offline Supertje80 - 16/04/2010 13:15
Avatar van Supertje80 Nieuw lid De index.php begint direct met session_start(); Dat is het niet. Het lijkt wel of smarty de sessie maar 1 keer interpreteerd, elke keer als de sessie waarde veranderd doet smarty er niets mee. Zo kan ik die {if} {else} niet maken..
Offline Mikee - 16/04/2010 13:18
Avatar van Mikee Nieuw lid print_r($_SESSION['id']); ofzo probeer eens wat te debuggen.
Offline genkstar - 16/04/2010 13:46 (laatste wijziging 16/04/2010 13:47)
Avatar van genkstar Nieuw lid Ik zou

$loggedin = $_SESSION['loggedin'];
$smarty->assign('loggedin', $loggedin);

en in de template;

{if $loggedin == true}
ingelogde acties
{else}
niet ingelogd acties
{/if}
Offline Supertje80 - 19/04/2010 14:47
Avatar van Supertje80 Nieuw lid Het probleem is nog niet opgelost. Wat ik niet begrijp is dat op de index.php pagina de sessie een andere waarde heeft dan in de template (.tpl). Als er ingelogd wordt krijgt de sessie een waarde '1'. Wordt er uitgelogd, wordt de sessie leeggemaakt.
De code:

// index.php
if(isSet($_POST['submitlogin']))
{
handleLogin(); // hier wordt als alles klopt de sessie 'loggedin' gevuld met waarde '1'
}

if($_GET['actie'] == 'loguit')
{
$_SESSION['loggedin'] = "";
}
$loggedin = $_SESSION['loggedin'];
$smarty->assign("loggedin",$loggedin);

en in de template:
{if $loggedin == ""}
het formulier
{else}
actie na het inloggen
{/if}

Momenteel wordt ondanks dat de sessie 'loggedin' een waarde heeft, toch het formulier getoond. En niet de actie na het inloggen.

Hoe kan het dat in de template de sessie leeg blijft?
Offline DaOxx - 19/04/2010 16:41 (laatste wijziging 19/04/2010 16:43)
Avatar van DaOxx PHP beginner Je zulty toch ergens wel een fout maken, misschien bij het setten van de sessie of het starten van de sessie op een andere pagina.

Je kunt het beste hier je complete code posten zodat we je het beste kunnen helpen.

Ik werk zelf ook op de bovenstaande manier:

$objTpl->assign("login",$_SESSION['login']);

{if $login > 0}
// login gegevens
{else}
// formulier
{/if}
Offline Supertje80 - 19/04/2010 21:10 (laatste wijziging 19/04/2010 21:13)
Avatar van Supertje80 Nieuw lid Ik zal de code van de 3 pagina's hier neerzetten, zodat jullie wellicht zien wat er mis gaat:

  1. // index.php:
  2.  
  3. include("include/login.inc.php");
  4. if(isSet($_POST['submitlogin']))
  5. {
  6. handleLogin();
  7. }
  8. $smarty = new Smarty;
  9. if($_GET['actie'] == 'loguit')
  10. {
  11. $_SESSION['loggedin'] = '';
  12. }
  13. $loggedin = $_SESSION['loggedin'];
  14. $smarty->assign("loggedin",$loggedin);
  15. $smarty->display("index.tpl");
  16.  
  17. // handleLogin
  18.  
  19. function handleLogin()
  20. {
  21. $fout = FALSE;
  22. $foutmelding = '';
  23. $foutmelding = array();
  24.  
  25. if($_POST['login'] == "" || $_POST['passwrd'] == "")
  26. {
  27. $fout = TRUE;
  28. $foutmelding[] = 'Vul beide velden in';
  29. }
  30. if($_POST['login'] != "" && ($_POST['passwrd']) != "")
  31. {
  32. $gebruikersnaam = CheckNameDb($_POST["login"]);
  33. $passwrd=CheckPasswordDb($_POST["login"]);
  34. if($gebruikersnaam == "" || (trim($passwrd) != trim($_POST["passwrd"])) )
  35. {
  36. $fout = TRUE;
  37. $foutmelding[] = 'Foutieve naam en/of paswoord';
  38. $naam = $_POST['login'];
  39. $paswoord = $_POST['passwrd'];
  40. $datum = date("Y-m-d");
  41. $tijd = date("H:i:s");
  42. $ip = $_SERVER['REMOTE_ADDR'];
  43. $sql= mysql_query("insert INTO login_foutief (lf_Naam, lf_Paswoord, lf_Datum, lf_Tijd, lf_Ip) VALUES ('$naam', '$paswoord', '$datum', '$tijd', '$ip') ");
  44. $_SESSION['loggedin'] = '';
  45. }
  46. else
  47. {
  48. $_SESSION['login'] = $_POST['login'];
  49. $_SESSION['paswoord'] = trim($_POST['passwrd']);
  50. $_SESSION['loggedin'] = '1';
  51. $naam = $_POST['login'];
  52. $datum = date("Y-m-d");
  53. $tijd = date("H:i:s");
  54. $ip = $_SERVER['REMOTE_ADDR'];
  55. $sql= mysql_query("insert INTO login_aanmeldingen (la_Naam, la_Datum, la_Tijd, la_Ip) VALUES ('$naam', '$datum', '$tijd', '$ip') ");
  56. $rechten = rechten($_SESSION['login'],$_SESSION['paswoord']);
  57. if($rechten == '1' || $rechten == '2')
  58. {
  59. $_SESSION['rechtentekst'] = '1';
  60. }
  61. if($rechten == '3')
  62. {
  63. $_SESSION['rechtentekst'] = '3';
  64. }
  65. }
  66. }
  67. }



// smarty template

{if $loggedin != ""}
// login gegevens
{else}
// login formulier
{/if}
[/code]


Hopelijk kunnen jullie me verder helpen  

Offline genkstar - 20/04/2010 01:10
Avatar van genkstar Nieuw lid regel 32
  1. $gebruikersnaam = CheckNameDb($_POST["login"]);
  2. $passwrd=CheckPasswordDb($_POST["login"]);

Je checkt 2x op gebruikersnaam..

Moet dat niet

  1. $gebruikersnaam = CheckNameDb($_POST["login"]);
  2. $passwrd=CheckPasswordDb($_POST["passwrd"]);


zijn
Offline Supertje80 - 20/04/2010 14:22
Avatar van Supertje80 Nieuw lid Nee dat is het niet. Met die tweede $_POST['login'] controleer ik het paswoord in de database dat bij die $_POST['login'] hoort.

Bovendien wordt als alle gegevens kloppen de sessie 'loggedin' gemaakt. Dat kan ik echo'n in de handleLogin en in de index.php. Dan heeft deze de waarde '1'. Maar in de .tpl wordt de sessie niet aangepast lijkt het wel. Of niet geinterpreteerd?

Graag advies!
Offline DaOxx - 20/04/2010 14:28
Avatar van DaOxx PHP beginner Heb je wel altijd een actie in je $_GET?

if($_GET['actie'] == 'loguit') {
Offline Supertje80 - 20/04/2010 14:49 (laatste wijziging 21/04/2010 14:51)
Avatar van Supertje80 Nieuw lid De $_GET['actie'] krijg ik als er ingelogd is en er op de <a href> loguit wordt geklikt. Die krijgt de $_GET['actie']='loguit' mee.

Wat gebeurt er; ik log in, de sessie loggedin wordt gemaakt, ik loguit, de sessie wordt leeggemaakt maar de lege waarde wordt niet geassignd door Smarty. Misschien ligt daar het probleem? Als ik de sessie variabele van 'loggedin' controleer, doet deze wat ik wil. Vullen bij inloggen, legen bij uitloggen. Maar de Smarty variabele $loggedin veranderd blijkbaar niet mee. En daarom wordt in de .tpl ook het verkeerde gedeelte getoon.

Wat bovendien wel eens gebeurt, is dat wanneer ik naar een andere pagina van de site ga, de smarty variabele $loggedin opeens wel veranderd en de juiste actie wordt ondernomen bij het inloggedeelte. Maar niet als je binnen de huidige pagina 'n actie doet, zoals inloggen en uitloggen. Dan wordt de Smarty variabele niet aangepast door de assign. Terwijl wanneer je echo $_SESSION['loggedin'] doet wel de juiste waarde verschijnt.

Vreemd...  

Iemand een idee hoe ik dit kan oplossen?
Offline gnotrgnotr - 21/04/2010 16:25
Avatar van gnotrgnotr Nieuw lid
  1. <?php
  2. if(!$_SESSION['[session]']){
  3. header("location: index.php");
  4. }
  5. ?>
Offline Supertje80 - 22/04/2010 17:43
Avatar van Supertje80 Nieuw lid @gnotrgnotr

Wat wil je met die code bereiken? Als ik hem in mijn index.php zet krijg ik de melding: De pagina verwijst niet op een juiste manier door

Kun je toelichten wat je met je code bedoelt?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.339s