Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Авторизация с помощью сокетов
 
 автор: fiper   (15.01.2008 в 15:27)   письмо автору
 
 

Пытаюсь авторизоваться с помощью сокетов на сайте.

Форма вот такая


<form  name='auth' action="" method='post' onsubmit='return sendform();' >
<br>
Логин: <input type=text value='' name='loger' id="login">
Пароль: <input type=password value='' id="pass" name='paser' ><input type=submit name=form_login  value='вход'>
<br>
<a href='/registr'>Регистрация</a>
</form>


Если логин и пароль верны записываются COOKIE с 4 параметрами : логин,md5(пароль),хост,ip, затем в базе сравниваются..

Как правильно авторизоваться, помогите плиз.


<?php  
  $hostname 
"www.сайт.ru";  
  
$path "/index1.php";
  
$line "";  
   
$fp fsockopen($hostname80$errno$errstr30);  
    if (!
$fp) echo "$errstr ($errno)<br />\n";  
  else  
  {  
$loger='admin';
$paser='admin';
   
$data "loger=$loger&paser=$paser;  
     
$headers = "POST $path HTTP/1.1\r\n";  
    
$headers .= "Host$hostname\r\n";  
    
$headers .= "Content-typeapplication/x-www-form-urlencoded\r\n";  
    
$headers .= "Content-Length".strlen($data)."\r\n\r\n";  
    fwrite(
$fp$headers.$data);  
    while (!feof(
$fp))  
    {  
      
$line .= fgets($fp, 1024);  
    }  
    fclose(
$fp);  
  }  
  echo 
$line;  
?> 

   
 
 автор: Unkind   (15.01.2008 в 15:38)   письмо автору
 
   для: fiper   (15.01.2008 в 15:27)
 

А где Ваши попытки? Это же явно не Ваш скрипт.

   
 
 автор: fiper   (15.01.2008 в 15:43)   письмо автору
 
   для: Unkind   (15.01.2008 в 15:38)
 

это не мой скрипт...взял на этом форуме

   
 
 автор: Саня   (15.01.2008 в 15:40)   письмо автору
 
   для: fiper   (15.01.2008 в 15:27)
 

<?
$hostname 
"www.сайт.ru";   
$path "/index1.php";

$data "loger=admin&paser=admin&form_login=".urlencode("вход");
$req "POST ".$path." HTTP/1.0\r\n"
      
."Host: ".$hostname."\r\n"
      
."Content-Type: application/x-www-form-urlencoded\r\n"
      
."Content-Length: ".strlen($data)."\r\n\r\n"
      
.$data;

$fp fsockopen($hostname80);
fwrite($fp$req);

$answ "";
while ( !
feof($fp) )
  
$answ .= fread($fp1024);

print 
$answ;

   
 
 автор: fiper   (15.01.2008 в 20:44)   письмо автору
 
   для: Саня   (15.01.2008 в 15:40)
 

Спасибо за скрипт. разобрался наконец немножко с сокетами.


Указываю логин и пароль, вижу что заголовки отправляются нормально, но cookie не создаются . Если указать неправильный пароль соответсвенно получаю сообщение от своего скрипта "Неправильно указан логин или пароль"

Почему не создаются cookie? Я так понимаю, потому что заголовки уже отправлены? Но тогда была бы ошибка.

   
 
 автор: mihdan   (15.01.2008 в 23:32)   письмо автору
 
   для: fiper   (15.01.2008 в 20:44)
 

setcookie()

   
 
 автор: Unkind   (15.01.2008 в 23:59)   письмо автору
 
   для: fiper   (15.01.2008 в 20:44)
 

> Почему не создаются cookie?
Раз уж Вы решили сами формировать запрос, то должны понять, что разбирать ответ сервера Вы должны теперь сами. Наверное, Ваш сервер посылал заголовок вроде Set-Cookie: .... Его и нужно разбирать.

   
 
 автор: fiper   (16.01.2008 в 03:18)   письмо автору
 
   для: Unkind   (15.01.2008 в 23:59)
 

Авторизация прошла успешно.. сервер вернул set-cookie с логином ,паролем и сидом

теперь появилась следующая проблема.

После авторизации появляется форма , нужно её заполнить и отправить методом пост, предполагаю, что нужно вытащить заголовки из предыдущего соединения примерно вот так


preg_match("#Set-Cookie: PHPSESSID=(.*);#i",$answ,$sid);
preg_match("#Set-Cookie: loger=(.*);#i",$answ,$out_login);
preg_match("#Set-Cookie: paser=(.*);#i",$answ,$out_pass);



и отправить ещё раз с помощью сокетов?Или есть возможность отправить всё с первого раза?

И ещё вопрос, как узнать какие заголовки отправляются на другом сервере при отправке данных?

   
 
 автор: fiper   (16.01.2008 в 12:44)   письмо автору
 
   для: fiper   (16.01.2008 в 03:18)
 

Кто-нибудь поможет?

   
 
 автор: fiper   (16.01.2008 в 20:41)   письмо автору
 
   для: fiper   (16.01.2008 в 12:44)
 

Нужно пердать 2 параметра сразу GET и post

if($_GET['mod']=='forum' and isset($_POST['who']))


Возможно это сделать или нет?

   
 
 автор: Саня   (16.01.2008 в 21:01)   письмо автору
 
   для: fiper   (16.01.2008 в 20:41)
 

Возможно:
<?
$post 
"переменные POST";
$get "переменные GET";
$req "POST /tndex.php?".$get." HTTP/1.0\r\n"
      
."Host: host\r\n"
      
."Content-Type: application/x-www-form-urlencoded\r\n"
      
."Content-Length: ".strlen($post)."\r\n\r\n"
      
.$post

   
 
 автор: Adamant   (17.01.2008 в 02:16)   письмо автору
 
   для: Саня   (16.01.2008 в 21:01)
 

Уважаемые программисты, нужна ваша помощь.
Осваиваю HTTP. Решил написать автосабмиттер для тренировки.Не могу понять в чем дело. Скрипт должен авторизовываться на сайте методом пост.

Взял за образец сайт loadit.ru , (думаю ни кого не обижу).
Форма для входа такая:
<form method="post">
<input name="login_name" type="text">
<input name="login_password" type="password">
<input name="login" type="hidden" id="login" value="submit"><
</form>

Скрипт написал такой:
set_time_limit(0); 
//Логин и пароль 666666 
$fp = fsockopen("loadit.ru", 80, $errno, $errstr, 30); 
if (!$fp) 
  { 
      echo "$errstr ($errno)<br />\n"; 
   exit(); 
  } 
$post_data = "login_name=666666&login_password=666666&login=submit"; 
$out = "POST / HTTP/1.1\r\n"; 
$out .= "Host: loadit.ru\r\n"; 
$out .= "Connection: Close\r\n\r\n"; 
$out .= "Accept: text/html;\r\n"; 
$out .= "Referer: http://loadit.ru\r\n"; 
$out .= "Connection: Close\r\n"; 
$out .= "Content-Length: ".strlen($post_data)."\r\n"; 
$out .= "Content-type: application/x-www-form-urlencoded\r\n\r\n"; 
$out .= $post_data; 
fwrite($fp, $out); 

$result = ''; 
while (!feof($fp)) 
  { 
   $result .= fgets($fp, 128); 
  } 
fclose($fp); 

// зарегились 
$fp = fsockopen("loadit.ru.", 80, $errno, $errstr, 30); 
if (!$fp) 
  { 
   echo "$errstr ($errno)<br />\n"; 
   exit(); 
  } 
preg_match_all('/Set-Cookie: ([^;]+)/',$result,$cook,PREG_PATTERN_ORDER); 
echo "<pre>"; 
print_r($cook); 
echo "</pre><br />"; 
$out = "GET / HTTP/1.0\r\n"; 
$out.= "Cookie: ".implode("; ",$cook[1])."\r\n\r\n"; 
fwrite($fp, $out); 
while (!feof($fp)) 
  { 
   echo "<pre>"; 
   echo fgets($fp, 128); 
   echo "</pre>"; 
  } 
fclose($fp);  

Сервер прислал такие заголовки:
Array   
(   
    [0] => Array   
        (   
            [0] => Set-Cookie: PHPSESSID=ac75f6d75f4a7c9110deba355d5d2b4a   
        )   
  
    [1] => Array   
        (   
            [0] => PHPSESSID=ac75f6d75f4a7c9110deba355d5d2b4a   
        )   
  
)   
  
  
HTTP/1.1 200 OK   
  
Date: Sun, 13 Jan 2008 00:34:27 GMT   
  
Server: Apache/2  
  
Last-Modified: Wed, 24 Oct 2007 22:56:55 GMT   
  
ETag: "2060403-2c-8b59bc0"   
  
Accept-Ranges: bytes   
  
Content-Length: 44  
  
Vary: Accept-Encoding,User-Agent   
  
Connection: close   
  
Content-Type: text/html   
  
Apache is functioning normally  

Авторизоваться не получается. Несколько дней провел за чтением мануалов, но не нашел ответа на свою проблему.
Как получить тело самой страницы, которая после этого отображается?
Пробовал потом смотреть readfile этой же страницы, но там авторизации нет. Вот и не знаю, что мне с этим делать?
Однозначно нужен ваш совет специалиста.
С уважением Вячеслав.

   
 
 автор: Trianon   (17.01.2008 в 09:00)   письмо автору
 
   для: Adamant   (17.01.2008 в 02:16)
 

loadit.ru. с точкой - это как?
Зачем Вы используете разные версии протокола?
Поле Host: во втором запросе куда-то делось.
Зато полей Connection - в первом - целых два.

А чтобы не писать одно и то же по нескольку раз, люди используют функции.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования