<?php
include("database.php");
include("mailer.php");
include("form.php");
(...)
function Session(){
$this->startSession();
}
function startSession(){
global $database; //The database connection
$this->logged_in = $this->checkLogin();
(...)
if(isset($_SESSION['url'])){ $this->referrer = $_SESSION['url'];
}else{
$this->referrer = "/";
}
$this->url = $_SESSION['url'] = $_SERVER['PHP_SELF'];
}
function checkLogin(){
global $database; //The database connection
if(isset($_COOKIE['cookname']) && isset($_COOKIE['cookid'])){ $this->username = $_SESSION['username'] = $_COOKIE['cookname'];
$this->userid = $_SESSION['userid'] = $_COOKIE['cookid'];
}
if(isset($_SESSION['username']) && isset($_SESSION['userid']) && $_SESSION['username'] != GUEST_NAME){
if($database->confirmUserID($_SESSION['username'], $_SESSION['userid']) != 0){
unset($_SESSION['username']); unset($_SESSION['userid']); return false;
}
$this->userinfo = $database->getUserInfo($_SESSION['username']);
$this->username = $this->userinfo['username'];
$this->userid = $this->userinfo['userid'];
$this->userlevel = $this->userinfo['userlevel'];
return true;
}
else{
return false;
}
}
function login($subuser, $subpass, $subremember){
global $database, $form; //The database and form object
$field = "user"; //Use field name for username
if(!$subuser || strlen($subuser = trim($subuser)) == 0
){ $form->setError($field, "* Username not entered");
}
else{
if(!eregi("^([0-9a-z])*$", $subuser)){ $form->setError($field, "* Username not alphanumeric");
}
}
$field = "pass"; //Use field name for password
if(!$subpass){
$form->setError($field, "* Password not entered");
}
if($form->num_errors > 0){
return false;
}
$result = $database->confirmUserPass($subuser, md5($subpass));
if($result == 1){
$field = "user";
$form->setError($field, "* Username not found");
}
else if($result == 2){
$field = "pass";
$form->setError($field, "* Invalid password");
}
if($form->num_errors > 0){
return false;
}
$this->userinfo = $database->getUserInfo($subuser);
$this->username = $_SESSION['username'] = $this->userinfo['username'];
$this->userid = $_SESSION['userid'] = $this->generateRandID();
$this->userlevel = $this->userinfo['userlevel'];
$database->updateUserField($this->username, "userid", $this->userid);
$database->addActiveUser($this->username, $this->time);
$database->removeActiveGuest($_SERVER['REMOTE_ADDR']);
if($subremember){
setcookie("cookname", $this->username, time()+COOKIE_EXPIRE
, COOKIE_PATH
); setcookie("cookid", $this->userid, time()+COOKIE_EXPIRE
, COOKIE_PATH
); }
return true;
}
function logout(){
global $database; //The database connection
if(isset($_COOKIE['cookname']) && isset($_COOKIE['cookid'])){ }
unset($_SESSION['username']); unset($_SESSION['userid']);
$this->logged_in = false;
$database->removeActiveUser($this->username);
$database->addActiveGuest($_SERVER['REMOTE_ADDR'], $this->time);
$this->username = GUEST_NAME;
$this->userlevel = GUEST_LEVEL;
}
function register($subuser, $subpass, $subemail){
global $database, $form, $mailer; //The database, form and mailer object
$field = "user"; //Use field name for username
if(!$subuser || strlen($subuser = trim($subuser)) == 0
){ $form->setError($field, "* Username not entered");
}
else{
$form->setError($field, "* Username below 5 characters");
}
else if(strlen($subuser) > 30
){ $form->setError($field, "* Username above 30 characters");
}
else if(!eregi("^([0-9a-z])+$", $subuser)){ $form->setError($field, "* Username not alphanumeric");
}
$form->setError($field, "* Username reserved word");
}
else if($database->usernameTaken($subuser)){
$form->setError($field, "* Username already in use");
}
else if($database->usernameBanned($subuser)){
$form->setError($field, "* Username banned");
}
}
$field = "pass"; //Use field name for password
if(!$subpass){
$form->setError($field, "* Password not entered");
}
else{
$form->setError($field, "* Password too short");
}
else if(!eregi("^([0-9a-z])+$", ($subpass = trim($subpass)))){ $form->setError($field, "* Password not alphanumeric");
}
}
$field = "email"; //Use field name for email
if(!$subemail || strlen($subemail = trim($subemail)) == 0
){ $form->setError($field, "* Email not entered");
}
else{
$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");
}
}
if($form->num_errors > 0){
return 1; //Errors with form
}
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
}
}
}
function editAccount($subcurpass, $subnewpass, $subemail){
global $database, $form; //The database and form object
if($subnewpass){
$field = "curpass"; //Use field name for current password
if(!$subcurpass){
$form->setError($field, "* Current Password not entered");
}
else{
!eregi("^([0-9a-z])+$", ($subcurpass = trim($subcurpass)))){ $form->setError($field, "* Current Password incorrect");
}
if($database->confirmUserPass($this->username,md5($subcurpass)) != 0
){ $form->setError($field, "* Current Password incorrect");
}
}
$field = "newpass"; //Use field name for new password
$form->setError($field, "* New Password too short");
}
else if(!eregi("^([0-9a-z])+$", ($subnewpass = trim($subnewpass)))){ $form->setError($field, "* New Password not alphanumeric");
}
}
else if($subcurpass){
$field = "newpass"; //Use field name for new password
$form->setError($field, "* New Password not entered");
}
$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");
}
}
if($form->num_errors > 0){
return false; //Errors with form
}
if($subcurpass && $subnewpass){
$database->updateUserField($this->username,"password",md5($subnewpass)); }
if($subemail){
$database->updateUserField($this->username,"email",$subemail);
}
return true;
}
function isAdmin(){
return ($this->userlevel == ADMIN_LEVEL ||
$this->username == ADMIN_NAME);
}
function generateRandID(){
return md5($this->generateRandStr(16
)); }
function generateRandStr($length){
$randstr = "";
for($i=0; $i<$length; $i++){
if($randnum < 10){
$randstr .= chr($randnum+48);
}else if($randnum < 36){
$randstr .= chr($randnum+55);
}else{
$randstr .= chr($randnum+61);
}
}
return $randstr;
}
};
$session = new Session;
$form = new Form;
?>
To jest moj plik sessions.php. Mam ustawione kodowanie utf-8 bez BOM. Musialem skrocic troche ten plik na poczatku przez ograniczenia wielkosci posta...
Ten post edytował kubatur0 11.04.2010, 16:28:28