thyscorpion Posted June 30, 2007 Share Posted June 30, 2007 Am attaching the code below.. when i login.. it accepts a valid login and even shows the "You are authenticated as " . $_SESSION['user'] . "<br>";" line with the username. But when i reload the page or just open it again it asks me for the login again. i am a novice so i know i must be doing a simple mistake. My question is: why is it asking for my login info again after i have logged in and reload the page again? how to i keep the session? Please help!.. <?php // Start the login session //session_start(); ?> ........ ........... (Rest of HTML Code) ........ <div id="footer"> <img src="images/footer.jpg" alt="Ankur Bakshi 'Copy Right'\"> <?PHP include("dbinfo.inc.php"); $db = mysql_connect(localhost,$user,$password) or die("Couldn't connect to the database."); mysql_select_db($database) or die("Couldn't select the database"); // Add slashes to the username, and make a md5 checksum of the password. $_POST['user'] = addslashes($_POST['user']); $_POST['pass'] = md5($_POST['pass']); $result = mysql_query("SELECT count(id) FROM people WHERE user_pw='$_POST[pass]' AND username='$_POST[user]'") or die("Couldn't query the user-database."); $num = mysql_result($result, 0); mysql_close(); if (!$num) { // When the query didn't return anything, // display the login form. echo "<form id='login' action='$_SERVER[php_SELF]' method='post'>"; echo "<!--Username:--><input type='text' class='theInput' name='user' />"; echo "<!--Password: --><input type='password' class='theInput' name='pass' />"; echo "<input type='submit' value='login' class='theSubmit' name='Submit' /></form>"; } else { // Start the login session //session_start(); // We've already added slashes and MD5'd the password $_SESSION['user'] = $_POST['user']; $_SESSION['pass'] = $_POST['pass']; // All output text below this line will be displayed // to the users that are authenticated. Since no text // has been output yet, you could also use redirect // the user to the next page using the header() function. // header('Location: page2.php'); echo "<h1>Welcome</h1><a href='logout.php'>Logout</a>"; echo "You are authenticated as " . $_SESSION['user'] . "<br>"; } ?> </div> </div> </body> </html> Quote Link to comment https://forums.phpfreaks.com/topic/57829-session-problem-cant-keep-session-active/ Share on other sites More sharing options...
Wuhtzu Posted June 30, 2007 Share Posted June 30, 2007 It's more interesting to see what your PHP code looks like.... please post it Why have you commented out session_start()? Quote Link to comment https://forums.phpfreaks.com/topic/57829-session-problem-cant-keep-session-active/#findComment-286509 Share on other sites More sharing options...
thyscorpion Posted June 30, 2007 Author Share Posted June 30, 2007 It's more interesting to see what your PHP code looks like.... please post it Why have you commented out session_start()? Oh that is all of my php code for this page.. and :-) yeah i commented the session_start() line there as it was giving an error... (it is supposed to be before any thing else.) so its there on top before the html tag itself.. :-) Any ideas? Quote Link to comment https://forums.phpfreaks.com/topic/57829-session-problem-cant-keep-session-active/#findComment-286512 Share on other sites More sharing options...
Wuhtzu Posted June 30, 2007 Share Posted June 30, 2007 session_start() have to be called if you wanna use your session data after for example a page reload/refresh... Quote Link to comment https://forums.phpfreaks.com/topic/57829-session-problem-cant-keep-session-active/#findComment-286515 Share on other sites More sharing options...
thyscorpion Posted June 30, 2007 Author Share Posted June 30, 2007 session_start() have to be called if you wanna use your session data after for example a page reload/refresh... i have used the session_start(); command in my page. its before the <html> tag of my file. (its shown in the code i attached with my first post. am i doing it wrong? Quote Link to comment https://forums.phpfreaks.com/topic/57829-session-problem-cant-keep-session-active/#findComment-286517 Share on other sites More sharing options...
thyscorpion Posted June 30, 2007 Author Share Posted June 30, 2007 SORRY session_start() have to be called if you wanna use your session data after for example a page reload/refresh... i have used the session_start(); command in my page. its before the <html> tag of my file. (its shown in the code i attached with my first post. am i doing it wrong? oops! :-P i feel like an ass! lol yup i accidently commented the session_start func.. SORRY i have removed it. but still no change in my problem... when i login.. after that if i just load the same page again also. the login form comes up again. To my knowledge it shouldn't.. :-) Quote Link to comment https://forums.phpfreaks.com/topic/57829-session-problem-cant-keep-session-active/#findComment-286520 Share on other sites More sharing options...
Wuhtzu Posted June 30, 2007 Share Posted June 30, 2007 $_POST['pass'] and $_POST['user'] is only set if the use hits submit/login button which means when you reload the page your mysql query wont "find any rows" and if(!$num) will be true so and it shows the login form again... Quote Link to comment https://forums.phpfreaks.com/topic/57829-session-problem-cant-keep-session-active/#findComment-286537 Share on other sites More sharing options...
Koobazaur Posted June 30, 2007 Share Posted June 30, 2007 $_POST['pass'] and $_POST['user'] is only set if the use hits submit/login button which means when you reload the page your mysql query wont "find any rows" and if(!$num) will be true so and it shows the login form again... Yup. Basically, you want to check your database against your $_SESSION['user'] and pass (if they exist), not the POST ones. Either that, or keep it the way it is, but if login is successful set something like $_SESSION['logged in']=true; and check that each pageload instead of the database (quicker and safer since you are not accessing the database every page load, just when logging in). Quote Link to comment https://forums.phpfreaks.com/topic/57829-session-problem-cant-keep-session-active/#findComment-286548 Share on other sites More sharing options...
thyscorpion Posted June 30, 2007 Author Share Posted June 30, 2007 $_POST['pass'] and $_POST['user'] is only set if the use hits submit/login button which means when you reload the page your mysql query wont "find any rows" and if(!$num) will be true so and it shows the login form again... hmm u got a valid point there Wuhtzu. I just added tried this code in addition to the code i shared with u above . the above code was "index.php" i have added another line at the end of the code (after being logged in.) which directs a new script page which does exactly what you point out is missing in my index.php. but still the page doesn't work. here are the codes of the two pages: INDEX.PHP <?php // Start the login session session_start(); ?> ..................... ..............[Rest of HTML] ..................... <div id="footer"> <img src="images/footer.jpg" alt="Ankur Bakshi 'Copy Right'\"> <?php include("dbinfo.inc.php"); $db = mysql_connect(localhost,$user,$password) or die("Couldn't connect to the database."); mysql_select_db($database) or die("Couldn't select the database"); // Add slashes to the username, and make a md5 checksum of the password. $_POST['user'] = addslashes($_POST['user']); $_POST['pass'] = md5($_POST['pass']); $result = mysql_query("SELECT count(id) FROM people WHERE user_pw='$_POST[pass]' AND username='$_POST[user]'") or die("Couldn't query the user-database."); $num = mysql_result($result, 0); mysql_close(); if (!$num) { // When the query didn't return anything, // display the login form. echo "<form id='login' action='$_SERVER[php_SELF]' method='post'>"; echo "<!--Username:--><input type='text' class='theInput' name='user' />"; echo "<!--Password: --><input type='password' class='theInput' name='pass' />"; echo "<input type='submit' value='login' class='theSubmit' name='Submit' /></form>"; } else { // Start the login session //session_start(); // We've already added slashes and MD5'd the password $_SESSION['user'] = $_POST['user']; $_SESSION['pass'] = $_POST['pass']; // All output text below this line will be displayed // to the users that are authenticated. Since no text // has been output yet, you could also use redirect // the user to the next page using the header() function. // header('Location: page2.php'); echo "<h1>Welcome</h1><a href='logout.php'>Logout</a>"; echo "You're now logged in. Try visiting <a href='login.php'>login page</a>."; echo "You are authenticated as " . $_SESSION['user'] . "<br>"; } ?> </div> </div> </body> </html> Second file (picked up from a tutorial) ( to my knowledge it points back to the index.php page if session is not found. LOGIN.PHP <?php session_start(); // Start the login session if (!$_SESSION['user'] || !$_SESSION['pass']) { // What to do if the user hasn't logged in // We'll just redirect them to the login page. header('Location: index.php'); die(); } else { // If the session variables exist, check to see // if the user has access. include("dbinfo.inc.php"); $db = mysql_connect(localhost,$user,$password) or die("Couldn't connect to the database."); mysql_select_db($database) or die("Couldn't select the database"); $result = mysql_query("SELECT count(id) FROM users WHERE user_pw='$_SESSION[pass]' AND username='$_SESSION[user]'") or die("Couldn't query the user-database."); $num = mysql_result($result, 0); mysql_close(); if (!$num) { // If the credentials didn't match, // redirect the user to the login screen. header('Location: index.php'); die(); } } // All output text below this line will be displayed // to the users that are authenticated. echo "<h1>Access Granted</h1>"; echo "You see? It travelled over these two pages.<br><br>"; echo "You are authenticated as " . $_SESSION['user'] . "<br>"; echo "The MD5 checksum of your password is " . $_SESSION['pass']; ?> Quote Link to comment https://forums.phpfreaks.com/topic/57829-session-problem-cant-keep-session-active/#findComment-286549 Share on other sites More sharing options...
thyscorpion Posted June 30, 2007 Author Share Posted June 30, 2007 Yup. Basically, you want to check your database against your $_SESSION['user'] and pass (if they exist), not the POST ones. hey Koobazaur, i did that with my second php file which i shared in this topic above. still i am getting the same problem. any ideas? Quote Link to comment https://forums.phpfreaks.com/topic/57829-session-problem-cant-keep-session-active/#findComment-286774 Share on other sites More sharing options...
thyscorpion Posted July 1, 2007 Author Share Posted July 1, 2007 hi, Thanks for your effort and time.. i realized i had to just tweak the logic of the IF and other loops in the code to make it work.. thanks.. Its working now! Cheerio Quote Link to comment https://forums.phpfreaks.com/topic/57829-session-problem-cant-keep-session-active/#findComment-286937 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.