[Curl]Авторизация с хранением сессии

Discussion in 'PHP' started by BAGA4, 8 Jan 2011.

  1. BAGA4

    BAGA4 New Member

    Joined:
    17 Nov 2010
    Messages:
    26
    Likes Received:
    1
    Reputations:
    0
    Сделал авторизацыю для форума,она авторизирует но авторизация сразу слетает...Надо сделать чтоб хранило сессию...Как это сделать?Делаю через Curl.Если можна добавте к моему коду.
    PHP:
    $url="http://sitename.ru/login.php?do=login";
    $ch curl_init();
    curl_setopt($chCURLOPT_URL$url);
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
    curl_setopt($chCURLOPT_POST1);
    curl_setopt($chCURLOPT_POSTFIELDS"do=login&vb_login_username=$login&vb_login_password=$pass&s&securitytoken=guest");
    curl_setopt($chCURLOPT_COOKIEJAR$_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
    curl_setopt($chCURLOPT_USERAGENT'Mozilla/4.0.' .'(compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)');
    $referer="http://sitename.ru/forum.php";
    curl_setopt($chCURLOPT_REFERER$referer);
    $result curl_exec($ch);
    $url="http://sitename.ru/forum.php";
    curl_setopt($chCURLOPT_URL$url);
    curl_setopt($chCURLOPT_POST0);
    curl_setopt($chCURLOPT_COOKIEFILE$_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
    curl_setopt($chCURLOPT_USERAGENT'Mozilla/4.0.' .'(compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)');
    curl_setopt($chCURLOPT_REFERER$referer);
    $result curl_exec($ch);
     
    curl_close($ch);
    echo 
    $result
     
  2. BAGA4

    BAGA4 New Member

    Joined:
    17 Nov 2010
    Messages:
    26
    Likes Received:
    1
    Reputations:
    0
    Пожалуйста помогите!Срочно надо...
     
  3. dr.Web

    dr.Web Member

    Joined:
    2 Feb 2009
    Messages:
    7
    Likes Received:
    22
    Reputations:
    10
    файл cookie.txt существует??
     
  4. miako

    miako Member

    Joined:
    20 Jan 2010
    Messages:
    154
    Likes Received:
    13
    Reputations:
    5
    Может нет прав на создание файла с куками? curl_close() может надо делать после 1 запроса?
     
  5. Romaxa55

    Romaxa55 Banned

    Joined:
    19 Oct 2005
    Messages:
    144
    Likes Received:
    30
    Reputations:
    4
    Тем же сейчас занимаюсь правада для вк, сделал ввиде 2-х функций, в первой мы авторизуемся и сохраняем икуки в файл что то в таком виде

    затем

    cookie.txt на запись разреши рядышком положи


    login();
    send('cookie.txt');

    Понимаю что как то глупо передовать такие параметры но все же работает
     
    #5 Romaxa55, 11 Jan 2011
    Last edited: 11 Jan 2011
  6. Mr.Br0wn

    Mr.Br0wn Banned

    Joined:
    26 Oct 2009
    Messages:
    40
    Likes Received:
    12
    Reputations:
    2
    Для этого можно использевать очень простой вариант:

    Создаем таблицу бд с пользевателями:
    Code:
    id smallint(8) unsigned NOT NULL auto_increment,
    login varchar(50) NOT NULL default '',
    password varchar(32) NOT NULL default ''
    
    2. Авторизация и сам вход:
    лучше всего юзать POST запросы, т.к. они безопастнее.
    собственно простая форма для авторизации:

    PHP:
    <form action="login.php" method="post">
        <
    table>
            <
    tr>
                <
    td>Логин:</td>
                <
    td><input type="text" name="login" /></td>
            </
    tr>
            <
    tr>
                <
    td>Пароль:</td>
                <
    td><input type="password" name="password" /></td>
            </
    tr>
            <
    tr>
                <
    td></td>
                <
    td><input type="submit" value="Войти" /></td>
            </
    tr>
        </
    table>
    </
    form>
    Пароль в чистов виде не будем хранить, лучше всего его хешировать:

    PHP:
    if (isset($_POST['login']) && isset($_POST['password']))
    {
        
    $login mysql_real_escape_string($_POST['login']);
        
    $password md5($_POST['password']);

        
    // делаем запрос к БД
        // и ищем юзера с таким логином и паролем

        
    $query "SELECT `id`
                FROM `users`
                WHERE `login`='
    {$login}' AND `password`='{$password}'
                LIMIT 1"
    ;
        
    $sql mysql_query($query) or die(mysql_error());

        
    // если такой пользователь нашелся
        
    if (mysql_num_rows($sql) == 1) {
            
    // то мы ставим об этом метку в сессии (допустим мы будем ставить ID пользователя)

            
    $row mysql_fetch_assoc($sql);
            
    $_SESSION['user_id'] = $row['id'];

            
    // не забываем, что для работы с сессионными данными, у нас в каждом скрипте должно присутствовать session_start();
        
    }
        else {
            die(
    'Такой логин с паролем не найдены в базе данных. И даём ссылку на повторную авторизацию.');
        }
    }
    3. Кто авторизован, а кто нет?

    Итак мы определились, что авторизованные пользователи — те, у которых указан $_SESSION['user_id']
    Те, у кого нет $_SESSION['user_id'], мы будем считать гостями.

    Пример использования:
    PHP:
    if (isset($_SESSION['user_id'])) {
        
    // показываем защищенные от гостей данные.
    }
    else {
        die(
    'Доступ закрыт, даём ссылку на авторизацию.');
    }
    4. Реализовать "запомнить меня на этом компьютере"?

    Здесь, помимо сессий, мы будем использовать куки.

    PHP:
    // если пользователь не авторизован
    if (!isset($_SESSION['user_id'])) {
        
    // то проверяем его куки
        // вдруг там есть логин и пароль к нашему скрипту

        
    if (isset($_COOKIE['login']) && isset($_COOKIE['password'])) {
            
    // если же такие имеются
            // то пробуем авторизовать пользователя по этим логину и паролю
            
    $login mysql_real_escape_string($_COOKIE['login']);
            
    $password mysql_real_escape_string($_COOKIE['password']);

            
    // и по аналогии с авторизацией через форму:

            // делаем запрос к БД
            // и ищем юзера с таким логином и паролем

            
    $query "SELECT `id`
                    FROM `users`
                    WHERE `login`='
    {$login}' AND `password`='{$password}'
                    LIMIT 1"
    ;
            
    $sql mysql_query($query) or die(mysql_error());

            
    // если такой пользователь нашелся
            
    if (mysql_num_rows($sql) == 1) {
                
    // то мы ставим об этом метку в сессии (допустим мы будем ставить ID пользователя)

                
    $row mysql_fetch_assoc($sql);
                
    $_SESSION['user_id'] = $row['id'];

                
    // не забываем, что для работы с сессионными данными, у нас в каждом скрипте должно присутствовать session_start();
            
    }
            else {
                
    // только мы не будем давай ссылку на форму авторизации
                // вдруг человек и не хочет был авторизованым
                // а пришел просто поглядеть на наши страницы как гость
            
    }
        }
    }

    Если что пиши в пм дам уже готовый скрипт для авторизации.