Сессия не меняется в PHP? - PullRequest
       14

Сессия не меняется в PHP?

0 голосов
/ 07 августа 2011

Помощь! Я использовал скрипт входа в систему Jpmaster77, но мне нужно было изменить его, потому что мне нужно было гораздо больше информации от пользователей и прочего ... Внезапно я столкнулся с этой проблемой:

Обычно, после того, как человек нажимает «Login», скрипт передает информацию в process.php, который запускает session.php. Session.php устанавливает файлы cookie. Затем он вызывает database.php и извлекает информацию о пользователе. Но теперь вместо перехода на страницу входа в систему сценарий возвращается к форме входа в систему. Тем не менее, система регистрирует, что я вошел в систему - когда я запустил скрипт «кто в сети», появляется учетная запись, в которую я только что вошел. Я подозреваю, что скрипт каким-то образом застрял (то есть обнаружил ошибку, или не может записать в базу данных или что-то) в части session.php, но я не уверен ..... Я хочу проверить, но Xdebug не работает для меня по какой-то странной причине = _ = Итак, вот мой код:

Форма входа:

<form action="process.php" method="POST" id="user_main">
<span class="label">Username:</span> 
<input type="text" name="user" maxlength="30" value="<? echo $form->value("user"); ?>">       
<? echo $form->error("user"); ?><br />
<span class="label">Password:</span> <input type="password" name="pass" maxlength="30" value="<? echo $form->value("pass"); ?>"><? echo $form->error("pass"); ?><br />
<input type="checkbox" name="remember" <? if($form->value("remember") != ""){ echo "checked"; } ?> />
<span class="label">Remember me next time</span><br />
<input type="hidden" name="sublogin" value="1">
<input type="submit" value="Login"><br /><br />
[<a href="forgotpass.php">Forgot Password?</a>] | Not registered? <a href="register.php">Sign-Up!</a>
</form>

process.php

(сначала проверьте, из какой формы оно было отправлено через скрытое значение из файла выше)

function Process(){
  global $session;
  /* User submitted login form */
  if(isset($_POST['sublogin'])){
     $this->procLogin();
  }

и procLogin говорит:

function procLogin(){
      global $session, $form;
      /* Login attempt */
      $retval = $session->login($_POST['user'], $_POST['pass'], isset($_POST['remember']));
      /* Login successful */
      if($retval){
         header("Location: ".$session->referrer);
      }
      /* Login failed */
      else{
         $_SESSION['value_array'] = $_POST;
         $_SESSION['error_array'] = $form->getErrorArray();
         header("Location: ".$session->referrer);
      }
   }

Сеанс входа в систему () говорит:

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(!ctype_alnum($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;

}

Начало сеанса ()

 function startSession(){
  global $database;  //The database connection
  session_start() or die("Line 46");   //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 ()

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;
  }

}

Помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...