Re: need help with sessions
| From: | Marek Kilimajer | Date: | Tue, 17 Dec 2002 11:54:32 +0000 |
| Subject: | Re: need help with sessions | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-128539@lists.php.net to get a copy of this message | ||
You don't need to call session_start twice. And you are right, the problem is in that line: you want to show your login screen
if both $_POST['uid'] and $_SESSION['uid'] are not set, therefor instead of OR use AND.
Anders Thoresson wrote:
Hi again, I'm still trying to understand sessions, and have made some progress during the afternoon, thanks to Ernest E. Vogelsinger. I'm at the moment trying to get a login-script up and running, but without 100 percent success. The script is split up in two major parts: bilder.php, which is the main script, and accesscontrol.php, which should check wether a valid username and password are entered or is already entered. The first time bilder.php is run, everything works fine. accesscontrol.php gets called, and since I've not logged in, a log in-form is displayed. I enter a valid username and password, which is checked in a MySQL-table and get the green light. But then the scripts forget that I've already logged in, and presents the log in-form over and over again. Since I'm new to this list, I'm not sure how big source code snippets that are needed and allowed to post. This time I make a rather long posting. If not ok, please let me know. bilder.php: <?php # bilder.php include ("db_functions.php"); include ("html_functions.php"); include ("accesscontrol.php"); include ("bilder_functions.php"); session_start(); define ("INITIAL_PAGE", 0); define ("LOGOUT", 1); # start $title = "bilder"; $header = " "; html_begin ($title, $header); # if $action is empty, show the start page if (empty($action))$action = INITIAL_PAGE;if(isset($_REQUEST["action"])) {$action = $_REQUEST["action"];} # examine $action switch ($action){ case INITIAL_PAGE: accesscontrol(); menu(); break;case LOGOUT: accesscontrol(); logout(); break; default: die("Unknown action: $action");} html_end(); ?> <*** bilder.php ends here ***> accesscontrol.php <?php function accesscontrol() {# accesscontrol.php - include-file to control that user is logged in session_start(); # check if either $_POST['uid'] or $_SESSION['uid'] is set if(!isset($_POST['uid']) OR !isset($_SESSION['uid'])) { $title = "log in"; $header = " "; html_begin ($title, $header); ?> <H2>You are not logged in.</H2> <p> To see the pictures you need a username and a password. If you don't have these, send a <A HREF="mailto:listor@thoresson.net">mail</A>. </p> <p> <FORM METHOD="POST" ACTION="<?=$_SERVER['PHP_SELF']?>"> <TABLE><TR> <TD>Name:</TD> <TD><input name=uid type=text maxlength=20 size=15></TD> </TR> <TR> <TD>Password: </TD> <TD><input name=pwd type=password maxlength=10 size=15></TD> </TR> <TR> <TD></TD> <TD><input type=submit name=skicka value=" OK "> <input type=reset value="Clear"></TD> </TR></TABLE> </FORM> </p> <?phphtml_end(); exit;} # if either $_POST['uid'] or $_SESSION['uid'] is set, here is where one end up $_SESSION['uid'] = $_POST['uid']; $_SESSION['pwd'] = $_POST['pwd']; $uid = $_SESSION['uid']; $pwd = $_SESSION['pwd']; # db_connect is my own function to connect to my database db_connect ("XXX", "YYY", "ZZZ"); $sql = "SELECT * FROM users WHERE userid = '$uid' AND password = PASSWORD('$pwd')"; $result = mysql_query($sql); if(!$result) {error("An error occured while your username and password were processed.\\n");} if(mysql_num_rows($result) == 0) {unset($_SESSION['uid']); unset($_SESSION['pwd']);$title = "log in - error"; $header = " "; html_begin ($title, $header); ?> <H2> Log in failure! </H2> <p> Your username or password was wrong. <A HREF="<?=$_SERVER['PHP_SELF']?>">Try again</A>. <?php html_end(); exit; } $_SESSION['username'] = mysql_result($result,0,"fullname"); } ?> <*** accesscontrol.php ends here ***> My non-educated guess is that there is something wrong with the line if(!isset($_POST['uid']) OR !isset($_SESSION['uid'])). Also, at the moment I have a session_start(); in both files. Right or wrong? Best regards, Anders