Автоматическая авторизация после регистрации

vave

Полезный
Регистрация
22 Июн 2007
Сообщения
467
Реакции
16
Как реализовать автоматическау авторизацию сразу после регистрации?
Не по ссылке в почте, а именно после заполнения регистрационных форм, нажал "зарегистрироваться" и сразу авторизировался.
 
Ну, взять код из входа в аккаунт и добавить к регистрации.

Например, в сессию сразу записать что пользователь авторизован.

Но часто бывает что проверка входа происходит до регистрации - тут можно сделать редирект на вторую страницу.
 
Не по ссылке в почте, а именно после заполнения регистрационных форм, нажал "зарегистрироваться" и сразу авторизировался.
Сделать редерикт на страницу, ссылка на которую отправляется в письме, а из письма удалить ссылку.
 
Ну, взять код из входа в аккаунт и добавить к регистрации.

Например, в сессию сразу записать что пользователь авторизован.

Но часто бывает что проверка входа происходит до регистрации - тут можно сделать редирект на вторую страницу.
Попробую так сделать, в скором времени отпишусь и видимо выложу код
 
Мои попытки безуспешны.
Как в этом коде сделать так что бы пользователь после регистрации попадал на страницу (любую) при этом уже с параметрами авторизации в сессии
PHP:
<?php
    include_once("../mypanel/cp-includes/bd_web.php");
    echo '<br><br><br>';
 
 
    if (isset($_POST['submit'])){
        if(empty($_POST['login']))  {
            echo '<br><font color="red"><img border="0" src="error.jpg" align="middle">Введите логин!</font>';
        }
        elseif (!preg_match("/^\w{3,}$/", $_POST['login'])) {
            echo '<br><font color="red"><img border="0" src="error.jpg" align="middle">В поле "Логин" введены недопустимые символы!</font>';
        }
        elseif(empty($_POST['password'])) {
            echo '<br><font color="red"><img border="0" src="error.jpg" align="middle" >Введите пароль!</font>';
        }
        elseif (!preg_match("/\A(\w){6,20}\Z/", $_POST['password'])) {
            echo '<br><font color="red"><img border="0" src="error.jpg" align="middle" >Пароль слишком короткий!</font>';
        }
        elseif(empty($_POST['password2'])) {
            echo '<br><font color="red"><img border="0" src="error.jpg" align="middle" >Введите подтверждение пароля!</font>';
        }
        elseif($_POST['password'] != $_POST['password2']) {
            echo '<br><font color="red"><img border="0" src="error.jpg" align="middle">Введенные пароли не совпадают!</font>';
        }

       
        else{
            $login = $_POST['login'];
            $password = $_POST['password'];
            $mdPassword = md5($password);
            $password2 = $_POST['password2'];
            $email = $_POST['email'];
            $rdate = date("d-m-Y / H:i");
            $name = $_POST['name'];
            $plugins = $_POST['plugins'];
            $m1_edit = $_POST['m1_edit'];
            $m2_edit = $_POST['m2_edit'];
            $m3_edit = $_POST['m3_edit'];
            $m4_edit = $_POST['m4_edit'];
            $m5_edit = $_POST['m5_edit'];
            $m1 = $_POST['m1'];
            $m2 = $_POST['m2']; 
            $m3 = $_POST['m3'];
            $m4 = $_POST['m4'];
            $m5 = $_POST['m5'];
            $color = $_POST['color']; 
            $slogan = $_POST['slogan'];
            $logo_text = $_POST['logo_text'];
            $album_edit = $_POST['album_edit'];
            $shop_edit = $_POST['shop_edit'];
            $post_edit = $_POST['post_edit'];
         
                 
           
            $query = ("SELECT id FROM users WHERE login='$login'");
            $sql = mysql_query($query) or die(mysql_error());
         
            if (mysql_num_rows($sql) > 0) {
                echo '<font color="red"><img border="0" src="error.jpg" align="middle">Пользователь с таким логином зарегистрирован!</font>';
            }
            else {
                $query2 = ("SELECT id FROM users WHERE email='$email'");
                $sql = mysql_query($query2) or die(mysql_error());
                if (mysql_num_rows($sql) > 0){
                    echo '<font color="red"><img border="0" src="error.jpg" align="middle">Пользователь с таким e-mail уже зарегистрирован</font>';
                }
                else{
                    $query = "INSERT INTO users (login, password, email, reg_date, m1_edit, m2_edit, m3_edit, m4_edit, m5_edit, m1, m2, m3, m4, m5, slogan, album_edit, shop_edit, logo_text, color, post_edit)
                              VALUES ('$login', '$mdPassword', '$email', '$rdate', '$m1_edit', '$m2_edit', '$m3_edit', '$m4_edit', '$m5_edit', '$m1', '$m2', '$m3', '$m4', '$m5', '$slogan', '$album_edit', '$shop_edit', '$logo_text', '$color', '$post_edit')";
                    $result = mysql_query($query) or die(mysql_error());;
                    echo '<font style="color:#a1c900"><img border="0" src="ok.jpg" align="middle">Вы успешно зарегистрировались!</font>';
                 
                             
                }
            }
        }
    }
    echo '<br><br><a style="font-size:15px; color:#555;" href="/">Вернуться на главную</a>';
?>

А вот так выглядит файл с сессиями

PHP:
<?
  if ($session_path)
  {
    session_save_path ($session_path);
  }
  session_start ();
  if ($_GET[signout])
  {
    session_destroy ();
    header ('location:index.php');
    exit ();
  }

  if (!((!$_SESSION[login] AND !$_SESSION[password])))
  {
    $link = mysql_connect ($dbhost, $dbuser, $dbpass);
    mysql_select_db ($dbname, $link);
    $result = mysql_query ('SELECT login,password FROM ' . $dbacct . ' WHERE id=\'' . $_SESSION[userid] . '\'', $link);
    $row = @mysql_fetch_array ($result);
    if (!((($row[login] AND !($_SESSION[login] !== $row[login])) AND !($_SESSION[password] !== $row[password]))))
    {
      session_destroy ();
      $alert = 'Your session has expired.';
      require 'cp-includes/inc-login.php';
      exit ();
    }
  }
  else
  {
    if (!((!$_POST[login] AND !$_POST[password])))
    {
      $_POST = safe_data ($_POST, 'query');
      $link = mysql_connect ($dbhost, $dbuser, $dbpass);
      mysql_select_db ($dbname, $link);
      $result = mysql_query ('SELECT *,CONCAT(first_name,\' \',last_name) AS name FROM ' . $dbacct . ' WHERE login=\'' . $_POST['login'] . '\' AND password=\'' . md5 ($_POST[password]) . '\'', $link);
      if (@mysql_num_rows ($result))
      {
        $row = mysql_fetch_array ($result);
        if ($row[pending])
        {
          session_destroy ();
          $alert = 'This account has not been activated yet.';
          require 'cp-includes/inc-login.php';
          exit ();
        }

        if ($row[expire])
        {
          if ($row[expire] < time ())
          {
            session_destroy ();
            $error = 'This account has expired.';
            require 'cp-includes/inc-login.php';
            exit ();
          }
        }

        if ($row[status])
        {
          session_destroy ();
          $error = 'This account is currently disabled.';
          require 'cp-includes/inc-login.php';
          exit ();
        }

        mysql_query ('UPDATE ' . $dbacct . ' SET last_login=\'' . time () . ('\' WHERE id=\'' . $row['id'] . '\' LIMIT 1'), $link);
        $c2[userid] = $row[id];
        $c2[name] = $row[name];
        $c2[user_type] = $row[user_type];
        $c2[login] = $row[login];
        $c2[password] = $row[password];
        $c2[maxlist] = $row[maxlist];
        $c2[listings] = $row[listings];
        $c2[status] = $row[status];
        $c2[location] = $row[location];
        $_SESSION = $c2;
        return 1;
      }

      session_destroy ();
      $error = 'Invalid login or password.';
      require 'cp-includes/inc-login.php';
      exit ();
    }

    $message = 'Please sign in to access the Control Panel.';
    require 'cp-includes/inc-login.php';
    exit ();
  }

?>
 
Мои попытки безуспешны.
Как в этом коде сделать так что бы пользователь после регистрации попадал на страницу (любую) при этом уже с параметрами авторизации в сессии
PHP:
<?php
    include_once("../mypanel/cp-includes/bd_web.php");
    echo '<br><br><br>';


    if (isset($_POST['submit'])){
        if(empty($_POST['login']))  {
            echo '<br><font color="red"><img border="0" src="error.jpg" align="middle">Введите логин!</font>';
        }
        elseif (!preg_match("/^\w{3,}$/", $_POST['login'])) {
            echo '<br><font color="red"><img border="0" src="error.jpg" align="middle">В поле "Логин" введены недопустимые символы!</font>';
        }
        elseif(empty($_POST['password'])) {
            echo '<br><font color="red"><img border="0" src="error.jpg" align="middle" >Введите пароль!</font>';
        }
        elseif (!preg_match("/\A(\w){6,20}\Z/", $_POST['password'])) {
            echo '<br><font color="red"><img border="0" src="error.jpg" align="middle" >Пароль слишком короткий!</font>';
        }
        elseif(empty($_POST['password2'])) {
            echo '<br><font color="red"><img border="0" src="error.jpg" align="middle" >Введите подтверждение пароля!</font>';
        }
        elseif($_POST['password'] != $_POST['password2']) {
            echo '<br><font color="red"><img border="0" src="error.jpg" align="middle">Введенные пароли не совпадают!</font>';
        }

     
        else{
            $login = $_POST['login'];
            $password = $_POST['password'];
            $mdPassword = md5($password);
            $password2 = $_POST['password2'];
            $email = $_POST['email'];
            $rdate = date("d-m-Y / H:i");
            $name = $_POST['name'];
            $plugins = $_POST['plugins'];
            $m1_edit = $_POST['m1_edit'];
            $m2_edit = $_POST['m2_edit'];
            $m3_edit = $_POST['m3_edit'];
            $m4_edit = $_POST['m4_edit'];
            $m5_edit = $_POST['m5_edit'];
            $m1 = $_POST['m1'];
            $m2 = $_POST['m2'];
            $m3 = $_POST['m3'];
            $m4 = $_POST['m4'];
            $m5 = $_POST['m5'];
            $color = $_POST['color'];
            $slogan = $_POST['slogan'];
            $logo_text = $_POST['logo_text'];
            $album_edit = $_POST['album_edit'];
            $shop_edit = $_POST['shop_edit'];
            $post_edit = $_POST['post_edit'];
       
               
         
            $query = ("SELECT id FROM users WHERE login='$login'");
            $sql = mysql_query($query) or die(mysql_error());
       
            if (mysql_num_rows($sql) > 0) {
                echo '<font color="red"><img border="0" src="error.jpg" align="middle">Пользователь с таким логином зарегистрирован!</font>';
            }
            else {
                $query2 = ("SELECT id FROM users WHERE email='$email'");
                $sql = mysql_query($query2) or die(mysql_error());
                if (mysql_num_rows($sql) > 0){
                    echo '<font color="red"><img border="0" src="error.jpg" align="middle">Пользователь с таким e-mail уже зарегистрирован</font>';
                }
                else{
                    $query = "INSERT INTO users (login, password, email, reg_date, m1_edit, m2_edit, m3_edit, m4_edit, m5_edit, m1, m2, m3, m4, m5, slogan, album_edit, shop_edit, logo_text, color, post_edit)
                              VALUES ('$login', '$mdPassword', '$email', '$rdate', '$m1_edit', '$m2_edit', '$m3_edit', '$m4_edit', '$m5_edit', '$m1', '$m2', '$m3', '$m4', '$m5', '$slogan', '$album_edit', '$shop_edit', '$logo_text', '$color', '$post_edit')";
                    $result = mysql_query($query) or die(mysql_error());;
                    echo '<font style="color:#a1c900"><img border="0" src="ok.jpg" align="middle">Вы успешно зарегистрировались!</font>';
               
                           
                }
            }
        }
    }
    echo '<br><br><a style="font-size:15px; color:#555;" href="/">Вернуться на главную</a>';
?>

А вот так выглядит файл с сессиями

PHP:
<?
  if ($session_path)
  {
    session_save_path ($session_path);
  }
  session_start ();
  if ($_GET[signout])
  {
    session_destroy ();
    header ('location:index.php');
    exit ();
  }

  if (!((!$_SESSION[login] AND !$_SESSION[password])))
  {
    $link = mysql_connect ($dbhost, $dbuser, $dbpass);
    mysql_select_db ($dbname, $link);
    $result = mysql_query ('SELECT login,password FROM ' . $dbacct . ' WHERE id=\'' . $_SESSION[userid] . '\'', $link);
    $row = @mysql_fetch_array ($result);
    if (!((($row[login] AND !($_SESSION[login] !== $row[login])) AND !($_SESSION[password] !== $row[password]))))
    {
      session_destroy ();
      $alert = 'Your session has expired.';
      require 'cp-includes/inc-login.php';
      exit ();
    }
  }
  else
  {
    if (!((!$_POST[login] AND !$_POST[password])))
    {
      $_POST = safe_data ($_POST, 'query');
      $link = mysql_connect ($dbhost, $dbuser, $dbpass);
      mysql_select_db ($dbname, $link);
      $result = mysql_query ('SELECT *,CONCAT(first_name,\' \',last_name) AS name FROM ' . $dbacct . ' WHERE login=\'' . $_POST['login'] . '\' AND password=\'' . md5 ($_POST[password]) . '\'', $link);
      if (@mysql_num_rows ($result))
      {
        $row = mysql_fetch_array ($result);
        if ($row[pending])
        {
          session_destroy ();
          $alert = 'This account has not been activated yet.';
          require 'cp-includes/inc-login.php';
          exit ();
        }

        if ($row[expire])
        {
          if ($row[expire] < time ())
          {
            session_destroy ();
            $error = 'This account has expired.';
            require 'cp-includes/inc-login.php';
            exit ();
          }
        }

        if ($row[status])
        {
          session_destroy ();
          $error = 'This account is currently disabled.';
          require 'cp-includes/inc-login.php';
          exit ();
        }

        mysql_query ('UPDATE ' . $dbacct . ' SET last_login=\'' . time () . ('\' WHERE id=\'' . $row['id'] . '\' LIMIT 1'), $link);
        $c2[userid] = $row[id];
        $c2[name] = $row[name];
        $c2[user_type] = $row[user_type];
        $c2[login] = $row[login];
        $c2[password] = $row[password];
        $c2[maxlist] = $row[maxlist];
        $c2[listings] = $row[listings];
        $c2[status] = $row[status];
        $c2[location] = $row[location];
        $_SESSION = $c2;
        return 1;
      }

      session_destroy ();
      $error = 'Invalid login or password.';
      require 'cp-includes/inc-login.php';
      exit ();
    }

    $message = 'Please sign in to access the Control Panel.';
    require 'cp-includes/inc-login.php';
    exit ();
  }

?>
После "Вы успешно зарегистрировались" добавить:
Код:
mysql_query ('UPDATE ' . $dbacct . ' SET last_login=\'' . time () . ('\' WHERE id=\'' . $row['id'] . '\' LIMIT 1'), $link);
        $c2[userid] = $row[id];
        $c2[name] = $row[name];
        $c2[user_type] = $row[user_type];
        $c2[login] = $row[login];
        $c2[password] = $row[password];
        $c2[maxlist] = $row[maxlist];
        $c2[listings] = $row[listings];
        $c2[status] = $row[status];
        $c2[location] = $row[location];
        $_SESSION = $c2;

Только вместо $row[id] сделать mysql_insert_id. И вместо $row, надо $_POST

И в начало:
if ($session_path)
{
session_save_path ($session_path);
}
session_start ();

И стоит сказать, код ужасный:
1. SQL инъекции
2. Использование mysql (На php.net: Данное расширение устарело, начиная с версии PHP 5.5.0, и удалено в PHP 7.0.0. Используйте вместо него MySQLi или PDO_MySQL.) - я использую PDO.
3. Подключение делают в начале кода и потом используют его - это для входа (А при регистрации - подключение /mypanel/cp-includes/bd_web.php - хоть что-то)
 
После "Вы успешно зарегистрировались" добавить:
Код:
mysql_query ('UPDATE ' . $dbacct . ' SET last_login=\'' . time () . ('\' WHERE id=\'' . $row['id'] . '\' LIMIT 1'), $link);
        $c2[userid] = $row[id];
        $c2[name] = $row[name];
        $c2[user_type] = $row[user_type];
        $c2[login] = $row[login];
        $c2[password] = $row[password];
        $c2[maxlist] = $row[maxlist];
        $c2[listings] = $row[listings];
        $c2[status] = $row[status];
        $c2[location] = $row[location];
        $_SESSION = $c2;

Только вместо $row[id] сделать mysql_insert_id. И вместо $row, надо $_POST

И в начало:
if ($session_path)
{
session_save_path ($session_path);
}
session_start ();

И стоит сказать, код ужасный:
1. SQL инъекции
2. Использование mysql (На php.net: Данное расширение устарело, начиная с версии PHP 5.5.0, и удалено в PHP 7.0.0. Используйте вместо него MySQLi или PDO_MySQL.) - я использую PDO.
3. Подключение делают в начале кода и потом используют его - это для входа (А при регистрации - подключение /mypanel/cp-includes/bd_web.php - хоть что-то)

Я немного почистил лишнее, в сессию необходимо занести только userid, login, password.
Но вот userid / id никак не хотят входить в сессию...

PHP:
mysql_query ('UPDATE ' . $dbacct . ('\' WHERE id=\'' . mysql_insert_id . '\' LIMIT 1'), $link);
        $_SESSION[userid] = $_POST[userid];
        $_SESSION[login] = $_POST[login];
        $_SESSION[password] = $_POST[password];

echo '<br>';
echo $_SESSION[userid];
echo '<br>';
echo $_SESSION[id];
echo '<br>';
echo $_SESSION[login];
echo '<br>';
echo $_SESSION[password];
 
Последнее редактирование:
Я немного почистил лишнее, в сессию необходимо занести только userid, login, password.
Но вот userid / id никак не хотят входить в сессию...

PHP:
mysql_query ('UPDATE ' . $dbacct . ('\' WHERE id=\'' . mysql_insert_id . '\' LIMIT 1'), $link);
        $_SESSION[userid] = $_POST[userid];
        $_SESSION[login] = $_POST[login];
        $_SESSION[password] = $_POST[password];

echo '<br>';
echo $_SESSION[userid];
echo '<br>';
echo $_SESSION[id];
echo '<br>';
echo $_SESSION[login];
echo '<br>';
echo $_SESSION[password];
Ты записываешь сессии до какого-либо вывода на экран?
 
Ты записываешь сессии до какого-либо вывода на экран?
Да я для себя их вывожу, что бы понять что выводится а что нет...
У меня в результате дает ошибку что сессия истекла, более чем уверен что дело в том что не выводится ID, так как для сессии нужен USERID, LOGIN, PASSWORD.
Как же его вытащить?
 
Решил задачу, я просто $_POST[login]; и $_POST[password]; вогнал в форму для входа которую вставил на страницу регистрации, и Java Скриптом сделал автоклик на кнопку войти, и всё это скрыл с помощью css "display:none"
В результате, после регистрации, пользователь видит сообщение об успешной регистрации (порядка одной секунды, пока всё догрузится) и В этот момент происходит автоматическое нажатие кнопки войти с автоматически заполненными полями, и пользователь попадает в свою панель управления.

По сути результат достигнут, на сколько правильное решение, не знаю :)
 
Назад
Сверху