forms - PHP- Fix problem where sessions only take effect after refreshing -
please review this stackoverflow post.
i have same php problem bob_cobb. here's brad chrisite's answer:
order of operations.
place session creation , test-for-validity check @ top of page rest of page can make judgment calls off existence of $_session['username']
(chances you're trying validate them inside content area "yay" or "ney" message appears in desired section of document. pretty, yes, whole top-half of page can't see it's [potentially] valid session.)
he saying session_start() , conditionals check session variables should @ top, rest of page act based upon that.
however, session-check is @ top of page.
<?php session_start(); if ($_session['username']) //user logged in, echo log out button. ... else //user not logged in, echo log in form & button. ... //login form validation if user not logged in , submitted form. //at end, create session variable ($_session['username']) //destroy session if user pressed log out button. session_destroy(); ?> everything works fine, but, poster of other question, have refresh page, top script executed (the script checks $_session['username']).
why that?
do not echo before entire control flow finished. mean should work separate logic display (even better: use pattern model-view-controller). in case, maybe can this:
<?php /* place control logic @ beginning. not echo in block. */ session_start(); if ($_session['username']) { $loggedin = true; } else { $loggedin = false; ... //login form validation if user not logged in , submitted form. //if login succeeded, set $loggedin true. //at end, create session variable. } //destroy session if user pressed log out button. session_destroy(); /* display logic below, not change state here */ if($loggedin) { echo logout button } else { echo login form } ?>
Comments
Post a Comment