Моя форма входа не работает с Chrome - PullRequest
0 голосов
/ 03 марта 2011

Я протестировал его как с IE, так и с Firefox, но в Chrome моя форма входа просто не отвечает. Нет сообщений об ошибках, нет ничего, он просто ничего не делает.

Вот код:

<form action="process.php" method="POST">
<table align="left" border="0" cellspacing="0" cellpadding="3">
<tr><td>Username:</td><td><input type="text" name="user" maxlength="30" value="<? echo $form->value("user"); ?>"></td><td><? echo $form->error("user"); ?></td></tr>
<tr><td>Password:</td><td><input type="password" name="pass" maxlength="30" value="<? echo $form->value("pass"); ?>"></td><td><? echo $form->error("pass"); ?></td></tr>
<tr><td colspan="2" align="left"><input type="checkbox" name="remember" <? if($form->value("remember") != ""){ echo "checked"; } ?>>
<font size="2">Remember me next time &nbsp;&nbsp;&nbsp;&nbsp;
<input type="hidden" name="sublogin" value="1">
<input type="submit" value="Login"></td></tr>
</table>
</form>

process.php:

   function procLogin(){
      global $session, $form;
      /* Login attempt */
      $retval = $session->login($_POST['user'], $_POST['pass'], isset($_POST['remember']));

      /* Login successful */
      if($retval){
         header( 'Location: index.php' ) ;
      }
      /* Login failed */
      else{
         $_SESSION['value_array'] = $_POST;
         $_SESSION['error_array'] = $form->getErrorArray();
         header("Location: ".$session->referrer);
      }
   }

session.php:

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']);

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

Ответы [ 3 ]

1 голос
/ 27 сентября 2012

Я столкнулся с той же проблемой при использовании jpWare, на которой основан ваш код.

Проблема возникает, когда вы используете функцию «запомнить меня» в одном браузере, а затем входите в другой браузер. Это вызвано тем, что php пытается использовать данные, хранящиеся в устаревших файлах cookie, для проверки вашего sessionId.

Чтобы решить эту проблему, PHP должен удалить эти куки во время входа в систему. Как показано ниже:

  /* 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']);

    if($subremember){
        setcookie(COOKIE_NAME, $this->customer_id, time()+COOKIE_EXPIRE, COOKIE_PATH);
        setcookie(COOKIE_ID,   $this->session_id,   time()+COOKIE_EXPIRE, COOKIE_PATH);
    } else {
    /* Delete cookies - This fixes a bug that wouldn't let you log in if your
     * session_id got changed (by another browser for example) but your cookies
     * still referenced the old one.
     */
    setcookie(COOKIE_NAME, $this->customer_id, time(), COOKIE_PATH);
    setcookie(COOKIE_ID,   $this->session_id,   time(), COOKIE_PATH);}
0 голосов
/ 07 апреля 2011

Вы должны иметь одинаковое количество td: s в каждой строке таблицы. Поскольку первые 2 строки имеют 3 ячейки, то и последняя строка с colspan должна иметь 3.

0 голосов
/ 14 марта 2011

Сначала попробуйте присвоить «имя» вашей кнопке, затем в вашем process.php проверьте, нажата ли эта кнопка, а затем ко всему прочему ... Проверка должна выглядеть примерно так:

if(isset($_POST['submit_name'])){

}

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