/** * Session.php * * The Session class is meant to simplify the task of keeping * track of logged in users and also guests. * * Written by: Jpmaster77 a.k.a. The Grandmaster of C++ (GMC) * Last Updated: August 19, 2004 */ include("jcdb.php"); include("jcmailer.php"); include("jcform.php"); class jcSession { 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 var $company; //Company name /** * Note: referrer should really only be considered the actual * page referrer in process.php, any other time it may be * inaccurate. */ /* Class constructor */ function jcSession(){ $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 $db; //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; $db->addActiveGuest($_SERVER['REMOTE_ADDR'], $this->time); } /* Update users last active timestamp */ else{ // $db->addActiveUser($this->email, $this->time); $db->addActiveUser($this->username, $this->time); } /* Remove inactive visitors from database */ $db->removeInactiveUsers(); $db->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 $db; //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']; $this->id = $_SESSION['id'] = $_COOKIE['id']; //jc $this->email = $_SESSION['email'] = $_COOKIE['email']; //jc } /* 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($db->confirmUserID($_SESSION['username'], $_SESSION['userid']) != 0){ /* Variables are incorrect, user not logged in */ unset($_SESSION['username']); unset($_SESSION['userid']); unset($_SESSION['id']); unset($_SESSION['email']); return false; } /* User is logged in, set class variables */ $this->userinfo = $db->getUserInfo($_SESSION['username']); $this->username = $this->userinfo['username']; $this->userid = $this->userinfo['userid']; $this->userlevel = $this->userinfo['userlevel']; $this->id = $this->userinfo['id']; //jc $this->email = $this->userinfo['email'];//jc 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 $db, $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, "* Login I.D. or Email not entered"); } else{ // Check if username is not alphanumeric if(!eregi("^([0-9a-z\.@])*$", $subuser)){ $form->setError($field, "* Invalid Login I.D. or Email, try again."); } } /* $email=$subuser; // Email error checking $field = "email"; //Use field name for email if(!$email || strlen($email = trim($email)) == 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,$email)){ $form->setError($field, "* Email invalid"); } $email = stripslashes($email); } */ // Password error checking if(!$subpass){ $form->setError("password", "* 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 = $db->confirmUserPass($subuser, md5($subpass)); /* Check error codes */ if($result == 1){ $form->setError("user", "* Login I.D. not found"); } else if($result == 2){ $form->setError("password", "* Invalid password"); } else if($result == 3){ $form->setError("confirm", "Please check your email to activate your account."); } /* Return if form errors exist */ if($form->num_errors > 0){ return false; } /* Username and password correct, register session variables */ $this->userinfo = $db->getUserInfo($subuser); $this->email = $_SESSION['email'] = $this->userinfo['email']; $this->username = $_SESSION['username'] = $this->userinfo['username']; $this->userid = $_SESSION['userid'] = $this->generateRandID(); $this->id = $_SESSION['id'] = $this->userinfo['id']; $this->userlevel = $this->userinfo['userlevel']; /* Insert userid into database and update active users table */ $db->updateUserField($this->username, "userid", $this->userid); $db->addActiveUser($this->username, $this->time); $db->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); setcookie("email", $this->email, time()+COOKIE_EXPIRE, COOKIE_PATH); //setcookie("id", $this->id, 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 $db; //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); //setcookie("dlr", "", time()-COOKIE_EXPIRE, COOKIE_PATH); setcookie("email", "", time()-COOKIE_EXPIRE, COOKIE_PATH); } /* Unset PHP session variables */ unset($_SESSION['username']); unset($_SESSION['userid']); unset($_SESSION['email']); unset($_SESSION['id']); /* Reflect fact that user has logged out */ $this->logged_in = false; /** * Remove from active users table and add to * active guests tables. */ $db->removeActiveUser($this->username); $db->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){ function register($v){ global $db, $form, $mailer; //The database, form and mailer object $checkuser = jcSession::checkuser($v); echo $checkuser->num_errors; /* 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{ $confirm=$v['confirm']=$this->generateRandID(); if($db->addNewUser($v)){ if(EMAIL_WELCOME){ $email=$v['email']; $username=$v['username']; $password=$v['password']; $mailer->sendWelcome($username,$email,$password,$confirm); /* $header = "To:" . $email . "\n"; $header .= "From:" . EMAIL_FROM_NAME . " <".EMAIL_FROM_ADDR.">\n"; $header .= "Bcc: buyatv@gmail.com\n"; $header .= "Organization: mywebcoupon.com\n"; $header .= "X-Sender: ". EMAIL_FROM_ADDR . "\n"; $header .= "X-Priority: 3 \n"; $header .= "X-Mailer: MKSR-Postimies \n"; $subject = "MyWebCoupon.com - Welcome!"; $body = $username.",\n\n" ."Welcome! You've just registered at MyWebCoupon.com Site\n\n" ."with the following information:\n\n" ."to activate your account, please go to the url\n\n" .'' ."http:\\mywebcoupon.com\sayalogin\sayaregister.php?userid=".$confirm."&type=999&verify=".$confirm."\n\n" ."if you can not click the link, copy the following url to your browser's address bar:"."\n\n" ."http:\\mywebcoupon.com\sayalogin\sayaregister.php?userid=".$confirm."&type=999&verify=".$confirm."\n\n" ."Username: ".$username."\n" ."Password: ".$password."\n\n" ."If you ever lose or forget your password, a new " ."password will be generated for you and sent to this " ."email address, if you would like to change your " ."email address you can do so by going to the " ."My Account page after signing in.\n\n" ."- MyWebCoupon.com"; mail($email,$subject,$body,$header); */ } return 0; //New user added succesfully }else{ return 2; //Registration attempt failed } } } function checkuser($v) { global $db, $form, $mailer; //The database, form and mailer object $username = $v['username']; $password = $v['password']; $email = $v['email']; /* Username error checking */ $field = "username"; //Use field name for username if(!$username || strlen($username = trim($username)) == 0){ $form->setError($field, "* User name not entered"); } else{ // Spruce up username, check length $username = stripslashes($username); if(strlen($username) < 5){ $form->setError($field, "* User name is below 5 characters"); } else if(strlen($username) > 30){ $form->setError($field, "* User name is above 30 characters"); } // Check if username is not alphanumeric else if(!eregi("^([0-9a-z])+$", $username)){ $form->setError($field, "* User name is not alphanumeric"); } // Check if username is reserved else if(strcasecmp($username, GUEST_NAME) == 0){ $form->setError($field, "* User name is reserved word"); } // Check if username is already in use else if($db->usernameTaken($username)){ $form->setError($field, "* User name is already in use"); } // Check if username is banned else if($db->usernameBanned($username)){ $form->setError($field, "* User name is banned"); } } // Email error checking $field = "email"; //Use field name for email if(!$email || strlen($email = trim($email)) == 0){ $form->setError($field, "* Email not entered"); } // Check if username is already in use else if($db->usernameTaken($username)){ $form->setError($field, "* Email is already in use"); } 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,$email)){ $form->setError($field, "* Email is invalid"); } } // $email = stripslashes($email); /* Password error checking */ $field = "password"; //Use field name for password if(!$password){ $form->setError($field, "* Password not entered"); } else{ /* Spruce up password and check length*/ $password = stripslashes($password); if(strlen($password) < 4){ $form->setError($field, "* Password too short"); } /* Check if password is not alphanumeric */ else if(!eregi("^([0-9a-z])+$", ($password = trim($password)))){ $form->setError($field, "* Password not alphanumeric"); } } return $form; } /** * 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 $db, $form; //The database and form object /* New password entered */ if($subnewpass){ /* Current Password error checking */ $field = "password"; //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($db->confirmUserPass($this->email,md5($subcurpass)) != 0){ $form->setError($field, "* Current Password incorrect"); } } /* New Password error checking */ $field = "newpassword"; //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 = "newpassword"; //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){ $db->updateUserField($this->email,"password",md5($subnewpass)); } /* Change Email */ if($subemail){ $db->updateUserField($this->email,"email",$subemail); } /* Success! */ return true; } /*------------------------------------------------------------------- * updateAccount - Attempts to edit the user's account information *------------------------------------------------------------------- */ function updateAccount($v){ global $db, $form; //The database and form object // if($subemail){ $db->addNewUser($v); // } /* Success! */ return 0; } //-------------------------------------------------------------------------------- /** * submitCouponLink - 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){ function submitCouponLink($v){ global $db, $form, $mailer; //The database, form and mailer object $comp_name = $v['comp_name']; $city = $v['city']; $state = $v['state']; $zip_code = $v['zip_code']; $country = $v['country']; $state = $v['state']; /* Username error checking */ if(!$comp_name || strlen($comp_name = trim($comp_name)) == 0){ $form->setError("comp_name", "* Company name not entered"); } if(!$city || strlen($city = trim($city)) == 0){ $form->setError("city", "* city not entered"); } if(!$state || strlen($state = trim($state)) == 0){ $form->setError("state", "* state not selected"); } if(!$zip_code || strlen($zip_code = trim($zip_code)) == 0){ $form->setError("zip_code", "* zip code not entered"); } if(!$country || strlen($country = trim($country)) == 0){ $form->setError("country", "* country not entered"); } $category = $v['category']; $coupon_url = $v['coupon_url']; $description = $v['description']; $expiration = $v['expiration']; if(!$category || strlen($category = trim($category)) == 0){ $form->setError("category", "* category not selected "); } if(!$coupon_url || strlen($coupon_url = trim($coupon_url)) == 0){ $form->setError("coupon_url", "* coupon url not entered"); } if(!$description || strlen($description = trim($description)) == 0){ $form->setError("description", "* description not entered"); } if(!$expiration || strlen($expiration = trim($expiration)) == 0){ $form->setError("expiration", "* expiration date not entered"); } $agree = $v['agree']; $display = $v['display']; if(!$agree || strlen($agree = trim($agree)) == 0){ $form->setError("agree", "* Please check your decision."); } if(!$display || strlen($display = trim($display)) == 0){ $form->setError("display", "* Please check your decision."); } $checkuser = jcSession::checkuser($v); /* echo "
";
var_dump($form);
echo "";
*/
/* 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{
$confirm=$v['confirm']=$this->generateRandID();
if($db->addCouponLink($v)){
if(EMAIL_WELCOME){
// $mailer->sendWelcome($username,$email,$password);
$mailer->sendRegister($username,$email,$password,$confirm);
}
return 0; //New user added succesfully
}else{
return 2; //Registration attempt failed
}
}
}
/**
* editCouponLink - 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 editCouponLink($subcurpass, $subnewpass, $subemail){
global $db, $form; //The database and form object
/* New password entered */
if($subnewpass){
/* Current Password error checking */
$field = "password"; //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($db->confirmUserPass($this->email,md5($subcurpass)) != 0){
$form->setError($field, "* Current Password incorrect");
}
}
/* New Password error checking */
$field = "newpassword"; //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 = "newpassword"; //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){
$db->updateUserField($this->email,"password",md5($subnewpass));
}
/* Change Email */
if($subemail){
$db->updateUserField($this->email,"email",$subemail);
}
/* Success! */
return true;
}
/*-------------------------------------------------------------------
* updateCouponLink - update CouponLink information
*------------------------------------------------------------------- */
function updateCouponLink($v){
global $db, $form; //The database and form object
// if($subemail){
$db->addNewUser($v);
// }
/* Success! */
return 0;
}
//--------------------------------------------------------------------------------
/**
* 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 jcSession;
/* Initialize form object */
$form = new jcForm;
?>
| Need a new floor?
Laminate flooring? Bamboo Flooring? Bambusaflooring.com |
Check MyWebCoupon before leaving. |
Business Owner, Submit your coupon here for free No coupon page? Create your own here. User login. |