Jump to content

Small Session Error, Need Help


Warptweet

Recommended Posts

I get this error...

 

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/warp/public_html/index.php:11) in /home/warp/public_html/include/session.php on line 46

 

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/warp/public_html/index.php:11) in /home/warp/public_html/include/session.php on line 46

 

When I use this code on my front page...

 

<?
include("include/session.php");
?>

<?
if($session->logged_in){
   echo "Welcome <b>$session->username</b>, you are logged in. <br><br>";
   }
?>

 

And the include/session.php is somthing because it starts a session.

I think I can fix this if I check IF there is already a session.

 

Please see the error, something about the header already being sent.

 

I appreciate all help, thanks a ton!

 

-Warptweet

Link to comment
https://forums.phpfreaks.com/topic/37573-small-session-error-need-help/
Share on other sites

Line 11 of index.php is

 

<body background="http://www.warptweet.com/images/warpback.PNG" topmargin="0"

 

Well, to explain a bit further...

Index.php has this entire code...

 

<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Warptweet.com</title>
</head>

<body background="http://www.warptweet.com/images/warpback.PNG" topmargin="0" link="#66CCFF" vlink="#66CCFF" alink="#66CCFF" text="#FFFFFF">

<p align="center">
<map name="FPMap0">
<area coords="6, 158, 94, 150, 95, 122, 8, 116" shape="polygon" href="http://www.warptweet.com">
<area coords="98, 120, 98, 150, 177, 147, 177, 114" shape="polygon" href="http://www.warptweet.com/flashportal.php">
<area href="http://www.warptweet.com/upload.php" shape="polygon" coords="180, 147, 261, 146, 261, 87, 179, 114">
<area href="http://www.warptweet.com/forums.php" shape="polygon" coords="262, 146, 340, 147, 341, 97, 283, 72, 262, 85">
<area href="http://www.warptweet.com/contact.php" shape="polygon" coords="344, 96, 344, 147, 426, 147, 425, 115">
<area href="http://www.warptweet.com" shape="polygon" coords="387, 45, 396, 40, 409, 34, 429, 32, 443, 33, 454, 36, 461, 40, 464, 47, 461, 55, 449, 59, 429, 62, 411, 62, 398, 58, 392, 52">
<area href="http://www.warptweet.com/main.php" shape="polygon" coords="484, 42, 495, 37, 507, 33, 518, 32, 529, 32, 538, 34, 546, 37, 555, 41, 560, 46, 556, 52, 548, 58, 535, 61, 523, 62, 512, 62, 500, 59, 488, 56, 484, 50">
<area href="http://www.warptweet.com/forums.php" shape="polygon" coords="576, 45, 584, 41, 593, 37, 606, 34, 617, 34, 631, 35, 644, 37, 653, 45, 651, 52, 645, 56, 640, 59, 632, 62, 620, 63, 608, 63, 595, 60, 584, 56, 579, 49">
<area href="http://www.warptweet.com/1413914" shape="polygon" coords="196, 7, 222, 7, 228, 13, 205, 13">
</map>
<img border="0" src="http://www.warptweet.com/images/warpbuttons.PNG" width="782" height="187" usemap="#FPMap0"></p>
<div align="center">
 <center>
 <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="79%" height="454">
   <tr>
     <td width="21%" height="454" bgcolor="#454545" valign="top">
     <p align="left"><font face="Tahoma" size="2" color="#FFCC66">        </font>
     <font face="Tahoma" size="2"> Extra Navigation</font></p>
     <p align="left"> </td>
     <td width="79%" height="454" bgcolor="#454545" valign="top" align="left"> <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#FFFFFF" width="32%" height="33" bordercolorlight="#BEBEBE" bordercolordark="#6F6F6F">
       <tr>
         <td width="100%" bordercolorlight="#FFFFFF" bordercolordark="#FFFFFF" bordercolor="#FFFFFF" height="33"></br></br>

<?
include("include/session.php");
?>
<?
/**
* User has already logged in, so display relavent links, including
* a link to the admin center if the user is an administrator.
*/
if($session->logged_in){
  echo "Welcome <b>$session->username</b>, you are logged in. <br><br>";
}
?>

         Newest Submitted Flash:<br>
 <?php
$dir = '211612151419/';
$H = opendir($dir);
while (($file = readdir($H))!==false) {
   if ($file != '.' && $file != '..') {
       $a = explode('.', $file);
       if ($a[1]=='php') {
           $d = filemtime("$dir$file");
           $res[$a[0]] = $d;
       }
   }
}
closedir($H);

// sort by date desc
arsort($res);

// list 20 only
$res = array_slice($res, 0, 1);
foreach ($res as $f => $d) echo "<a href=\"http://www.warptweet.com/211612151419/$f.php\">$f</a><br>"; 

?></td>
       </tr>
     </table>
     <div align="center" style="width: 598; height: 96">
       <center>
       <p><br>
 </p>
       <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#FFFFFF" width="58%" height="72" bordercolorlight="#BEBEBE" bordercolordark="#6F6F6F">
         <tr>
           <td width="100%" height="72" bordercolorlight="#BEBEBE" bordercolordark="#6F6F6F" bordercolor="#FFFFFF">
     <p align="center">Warptweet.com News<br>
 <?php
$data = file('1413914/frontpage.txt');
$data = array_reverse($data);
foreach($data as $element) {
   $element = trim($element);
   $pieces = explode("|", $element);
   echo $pieces[2] . "<BR>" . "<b>Posted by " . $pieces[1] . " on " . $pieces[0] . "</b><BR><BR>";
}
?></td>
         </tr>
       </table>
       </center>
     </div>
     </td>
   </tr>
 </table>
 </center>
</div>

</body>

</html>

 

And when I put this part of the above code on...

 

<?
include("include/session.php");
?>
<?
/**
* User has already logged in, so display relavent links, including
* a link to the admin center if the user is an administrator.
*/
if($session->logged_in){
  echo "Welcome <b>$session->username</b>, you are logged in. <br><br>";
}
?>

 

It gave me an error, something about the headers already being sent.

The include/session.php is the one that has all the sessions and stuff I think.

 

Here is include/session.php...

 

<?
include("database.php");
include("mailer.php");
include("form.php");

class Session
{
  var $username;     //Username given on sign-up
  var $userid;       //Random value generated on current login
  var $userlevel;    //The level to which the user pertains
  var $time;         //Time user was last active (page loaded)
  var $logged_in;    //True if user is logged in, false otherwise
  var $userinfo = array();  //The array holding all user info
  var $url;          //The page url current being viewed
  var $referrer;     //Last recorded site page viewed
  /**
   * Note: referrer should really only be considered the actual
   * page referrer in process.php, any other time it may be
   * inaccurate.
   */

  /* Class constructor */
  function Session(){
     $this->time = time();
     $this->startSession();
  }

  /**
   * startSession - Performs all the actions necessary to 
   * initialize this session object. Tries to determine if the
   * the user has logged in already, and sets the variables 
   * accordingly. Also takes advantage of this page load to
   * update the active visitors tables.
   */
  function startSession(){
     global $database;  //The database connection
    session_start();   //Tell PHP to start the session

     /* Determine if user is logged in */
     $this->logged_in = $this->checkLogin();

     /**
      * Set guest value to users not logged in, and update
      * active guests table accordingly.
      */
     if(!$this->logged_in){
        $this->username = $_SESSION['username'] = GUEST_NAME;
        $this->userlevel = GUEST_LEVEL;
        $database->addActiveGuest($_SERVER['REMOTE_ADDR'], $this->time);
     }
     /* Update users last active timestamp */
     else{
        $database->addActiveUser($this->username, $this->time);
     }

     /* Remove inactive visitors from database */
     $database->removeInactiveUsers();
     $database->removeInactiveGuests();

     /* Set referrer page */
     if(isset($_SESSION['url'])){
        $this->referrer = $_SESSION['url'];
     }else{
        $this->referrer = "/";
     }

     /* Set current url */
     $this->url = $_SESSION['url'] = $_SERVER['PHP_SELF'];
  }

  /**
   * checkLogin - Checks if the user has already previously
   * logged in, and a session with the user has already been
   * established. Also checks to see if user has been remembered.
   * If so, the database is queried to make sure of the user's 
   * authenticity. Returns true if the user has logged in.
   */
  function checkLogin(){
     global $database;  //The database connection
     /* Check if user has been remembered */
     if(isset($_COOKIE['cookname']) && isset($_COOKIE['cookid'])){
        $this->username = $_SESSION['username'] = $_COOKIE['cookname'];
        $this->userid   = $_SESSION['userid']   = $_COOKIE['cookid'];
     }

     /* Username and userid have been set and not guest */
     if(isset($_SESSION['username']) && isset($_SESSION['userid']) &&
        $_SESSION['username'] != GUEST_NAME){
        /* Confirm that username and userid are valid */
        if($database->confirmUserID($_SESSION['username'], $_SESSION['userid']) != 0){
           /* Variables are incorrect, user not logged in */
           unset($_SESSION['username']);
           unset($_SESSION['userid']);
           return false;
        }

        /* User is logged in, set class variables */
        $this->userinfo  = $database->getUserInfo($_SESSION['username']);
        $this->username  = $this->userinfo['username'];
        $this->userid    = $this->userinfo['userid'];
        $this->userlevel = $this->userinfo['userlevel'];
        return true;
     }
     /* User not logged in */
     else{
        return false;
     }
  }

  /**
   * login - The user has submitted his username and password
   * through the login form, this function checks the authenticity
   * of that information in the database and creates the session.
   * Effectively logging in the user if all goes well.
   */
  function login($subuser, $subpass, $subremember){
     global $database, $form;  //The database and form object

     /* Username error checking */
     $field = "user";  //Use field name for username
     if(!$subuser || strlen($subuser = trim($subuser)) == 0){
        $form->setError($field, "* Username not entered");
     }
     else{
        /* Check if username is not alphanumeric */
        if(!eregi("^([0-9a-z])*$", $subuser)){
           $form->setError($field, "* Username not alphanumeric");
        }
     }

     /* Password error checking */
     $field = "pass";  //Use field name for password
     if(!$subpass){
        $form->setError($field, "* Password not entered");
     }

     /* Return if form errors exist */
     if($form->num_errors > 0){
        return false;
     }

     /* Checks that username is in database and password is correct */
     $subuser = stripslashes($subuser);
     $result = $database->confirmUserPass($subuser, md5($subpass));

     /* Check error codes */
     if($result == 1){
        $field = "user";
        $form->setError($field, "* Username not found");
     }
     else if($result == 2){
        $field = "pass";
        $form->setError($field, "* Invalid password");
     }

     /* Return if form errors exist */
     if($form->num_errors > 0){
        return false;
     }

     /* Username and password correct, register session variables */
     $this->userinfo  = $database->getUserInfo($subuser);
     $this->username  = $_SESSION['username'] = $this->userinfo['username'];
     $this->userid    = $_SESSION['userid']   = $this->generateRandID();
     $this->userlevel = $this->userinfo['userlevel'];

     /* Insert userid into database and update active users table */
     $database->updateUserField($this->username, "userid", $this->userid);
     $database->addActiveUser($this->username, $this->time);
     $database->removeActiveGuest($_SERVER['REMOTE_ADDR']);

     /**
      * This is the cool part: the user has requested that we remember that
      * he's logged in, so we set two cookies. One to hold his username,
      * and one to hold his random value userid. It expires by the time
      * specified in constants.php. Now, next time he comes to our site, we will
      * log him in automatically, but only if he didn't log out before he left.
      */
     if($subremember){
        setcookie("cookname", $this->username, time()+COOKIE_EXPIRE, COOKIE_PATH);
        setcookie("cookid",   $this->userid,   time()+COOKIE_EXPIRE, COOKIE_PATH);
     }

     /* Login completed successfully */
     return true;
  }

  /**
   * logout - Gets called when the user wants to be logged out of the
   * website. It deletes any cookies that were stored on the users
   * computer as a result of him wanting to be remembered, and also
   * unsets session variables and demotes his user level to guest.
   */
  function logout(){
     global $database;  //The database connection
     /**
      * Delete cookies - the time must be in the past,
      * so just negate what you added when creating the
      * cookie.
      */
     if(isset($_COOKIE['cookname']) && isset($_COOKIE['cookid'])){
        setcookie("cookname", "", time()-COOKIE_EXPIRE, COOKIE_PATH);
        setcookie("cookid",   "", time()-COOKIE_EXPIRE, COOKIE_PATH);
     }

     /* Unset PHP session variables */
     unset($_SESSION['username']);
     unset($_SESSION['userid']);

     /* Reflect fact that user has logged out */
     $this->logged_in = false;

     /**
      * Remove from active users table and add to
      * active guests tables.
      */
     $database->removeActiveUser($this->username);
     $database->addActiveGuest($_SERVER['REMOTE_ADDR'], $this->time);

     /* Set user level to guest */
     $this->username  = GUEST_NAME;
     $this->userlevel = GUEST_LEVEL;
  }

  /**
   * register - Gets called when the user has just submitted the
   * registration form. Determines if there were any errors with
   * the entry fields, if so, it records the errors and returns
   * 1. If no errors were found, it registers the new user and
   * returns 0. Returns 2 if registration failed.
   */
  function register($subuser, $subpass, $subemail){
     global $database, $form, $mailer;  //The database, form and mailer object

     /* Username error checking */
     $field = "user";  //Use field name for username
     if(!$subuser || strlen($subuser = trim($subuser)) == 0){
        $form->setError($field, "* Username not entered");
     }
     else{
        /* Spruce up username, check length */
        $subuser = stripslashes($subuser);
        if(strlen($subuser) < 5){
           $form->setError($field, "* Username below 5 characters");
        }
        else if(strlen($subuser) > 30){
           $form->setError($field, "* Username above 30 characters");
        }
        /* Check if username is not alphanumeric */
        else if(!eregi("^([0-9a-z])+$", $subuser)){
           $form->setError($field, "* Username not alphanumeric");
        }
        /* Check if username is reserved */
        else if(strcasecmp($subuser, GUEST_NAME) == 0){
           $form->setError($field, "* Username reserved word");
        }
        /* Check if username is already in use */
        else if($database->usernameTaken($subuser)){
           $form->setError($field, "* Username already in use");
        }
        /* Check if username is banned */
        else if($database->usernameBanned($subuser)){
           $form->setError($field, "* Username banned");
        }
     }

     /* Password error checking */
     $field = "pass";  //Use field name for password
     if(!$subpass){
        $form->setError($field, "* Password not entered");
     }
     else{
        /* Spruce up password and check length*/
        $subpass = stripslashes($subpass);
        if(strlen($subpass) < 4){
           $form->setError($field, "* Password too short");
        }
        /* Check if password is not alphanumeric */
        else if(!eregi("^([0-9a-z])+$", ($subpass = trim($subpass)))){
           $form->setError($field, "* Password not alphanumeric");
        }
        /**
         * Note: I trimmed the password only after I checked the length
         * because if you fill the password field up with spaces
         * it looks like a lot more characters than 4, so it looks
         * kind of stupid to report "password too short".
         */
     }

     /* Email error checking */
     $field = "email";  //Use field name for email
     if(!$subemail || strlen($subemail = trim($subemail)) == 0){
        $form->setError($field, "* Email not entered");
     }
     else{
        /* Check if valid email address */
        $regex = "^[_+a-z0-9-]+(\.[_+a-z0-9-]+)*"
                ."@[a-z0-9-]+(\.[a-z0-9-]{1,})*"
                ."\.([a-z]{2,}){1}$";
        if(!eregi($regex,$subemail)){
           $form->setError($field, "* Email invalid");
        }
        $subemail = stripslashes($subemail);
     }

     /* Errors exist, have user correct them */
     if($form->num_errors > 0){
        return 1;  //Errors with form
     }
     /* No errors, add the new account to the */
     else{
        if($database->addNewUser($subuser, md5($subpass), $subemail)){
           if(EMAIL_WELCOME){
              $mailer->sendWelcome($subuser,$subemail,$subpass);
           }
           return 0;  //New user added succesfully
        }else{
           return 2;  //Registration attempt failed
        }
     }
  }
  
  /**
   * editAccount - Attempts to edit the user's account information
   * including the password, which it first makes sure is correct
   * if entered, if so and the new password is in the right
   * format, the change is made. All other fields are changed
   * automatically.
   */
  function editAccount($subcurpass, $subnewpass, $subemail){
     global $database, $form;  //The database and form object
     /* New password entered */
     if($subnewpass){
        /* Current Password error checking */
        $field = "curpass";  //Use field name for current password
        if(!$subcurpass){
           $form->setError($field, "* Current Password not entered");
        }
        else{
           /* Check if password too short or is not alphanumeric */
           $subcurpass = stripslashes($subcurpass);
           if(strlen($subcurpass) < 4 ||
              !eregi("^([0-9a-z])+$", ($subcurpass = trim($subcurpass)))){
              $form->setError($field, "* Current Password incorrect");
           }
           /* Password entered is incorrect */
           if($database->confirmUserPass($this->username,md5($subcurpass)) != 0){
              $form->setError($field, "* Current Password incorrect");
           }
        }
        
        /* New Password error checking */
        $field = "newpass";  //Use field name for new password
        /* Spruce up password and check length*/
        $subpass = stripslashes($subnewpass);
        if(strlen($subnewpass) < 4){
           $form->setError($field, "* New Password too short");
        }
        /* Check if password is not alphanumeric */
        else if(!eregi("^([0-9a-z])+$", ($subnewpass = trim($subnewpass)))){
           $form->setError($field, "* New Password not alphanumeric");
        }
     }
     /* Change password attempted */
     else if($subcurpass){
        /* New Password error reporting */
        $field = "newpass";  //Use field name for new password
        $form->setError($field, "* New Password not entered");
     }

     /* Email error checking */
     $field = "email";  //Use field name for email
     if($subemail && strlen($subemail = trim($subemail)) > 0){
        /* Check if valid email address */
        $regex = "^[_+a-z0-9-]+(\.[_+a-z0-9-]+)*"
                ."@[a-z0-9-]+(\.[a-z0-9-]{1,})*"
                ."\.([a-z]{2,}){1}$";
        if(!eregi($regex,$subemail)){
           $form->setError($field, "* Email invalid");
        }
        $subemail = stripslashes($subemail);
     }

     /* Errors exist, have user correct them */
     if($form->num_errors > 0){
        return false;  //Errors with form
     }

     /* Update password since there were no errors */
     if($subcurpass && $subnewpass){
        $database->updateUserField($this->username,"password",md5($subnewpass));
     }

     /* Change Email */
     if($subemail){
        $database->updateUserField($this->username,"email",$subemail);
     }

     /* Success! */
     return true;
  }
  
  /**
   * isAdmin - Returns true if currently logged in user is
   * an administrator, false otherwise.
   */
  function isAdmin(){
     return ($this->userlevel == ADMIN_LEVEL ||
             $this->username  == ADMIN_NAME);
  }
  
  /**
   * generateRandID - Generates a string made up of randomized
   * letters (lower and upper case) and digits and returns
   * the md5 hash of it to be used as a userid.
   */
  function generateRandID(){
     return md5($this->generateRandStr(16));
  }
  
  /**
   * generateRandStr - Generates a string made up of randomized
   * letters (lower and upper case) and digits, the length
   * is a specified parameter.
   */
  function generateRandStr($length){
     $randstr = "";
     for($i=0; $i<$length; $i++){
        $randnum = mt_rand(0,61);
        if($randnum < 10){
           $randstr .= chr($randnum+48);
        }else if($randnum < 36){
           $randstr .= chr($randnum+55);
        }else{
           $randstr .= chr($randnum+61);
        }
     }
     return $randstr;
  }
};


/**
* Initialize session object - This must be initialized before
* the form object because the form uses session variables,
* which cannot be accessed unless the session has started.
*/
$session = new Session;

/* Initialize form object */
$form = new Form;

?>

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.