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

Форум PHP

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

 

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

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

тема: Помогите разобраться с сокетами
 
 автор: Patriot22   (22.11.2009 в 22:14)   письмо автору
 
 

я передаю серверу логин и пароль, пишет что авторизован, всё норм. получаю куки, которые он устанавливаю. и потом хочу открыть страницу которая доступна только для авторизованных, но меня выбрасывает на авторизацию. ща покажу код, всё поймёте


<?php
// разные кон данные
$host = 'anyhost.ru';
$path = '/auth.php';
$login = 'login';
$password = 'pass';
$data = '&login=' . $login . '&pass=' . $password;
$useragent = 'Nokia';


// авторизация
$fp    =    fsockopen($host, 80, $errno, $errstr, 10);
$error = 0;
if(!
$fp) die('error');
$out    =    "POST " . $path . " HTTP/1.1\r\n";
$out    .=    "Host: " . $host . "\r\n";
$out    .=     "Content-type: application/x-www-form-urlencoded\r\n";
$out    .=    "Content-Length: " . strlen($data) . "\r\n";
$out    .=    "User-agent: " . $useragent . "\r\n";
$out    .=    "Accept: */*\r\n";
$out    .=    "Connection: Close\r\n\r\n";
fwrite ( $fp, $out . $data );
$headers='';
while ( 
$str = trim ( fgets ( $fp, 4096 ) ) )
$headers .= $str . "\n";
$body = '';
while ( !
feof ( $fp ) )
$body .= fgets ( $fp, 4096 );

print 
$body; // выводит что авторизация успешна

// получаем куки
preg_match ( "|session=([0-9A-z]+)|", $headers, $out );
$session        =    $out[1];




// пробуем открыть страницу только для авторизованных
$fp    =    fsockopen($host, 80, $errno, $errstr, 10);
$path = '/page.php';
$out    =    "GET " . $path . " HTTP/1.1\r\n";
$out    .=    "Host: " . $host . "\r\n";
$out.=    "Cookie: session=" . $session . "\r\n";
$out    .=    "User-agent: " . $useragent . "\r\n";
$out    .=    "Accept: */*\r\n";
$out    .=    "Connection: Close\r\n\r\n";
fwrite ( $fp, $out );
$headers='';
while ( 
$str = trim ( fgets ( $fp, 4096 ) ) )
  
$headers .= $str . "\n";
$body = '';
while ( !
feof ( $fp ) )
  
$body .= fgets ( $fp, 4096 );

print 
$body; // пишет не авторизованы
?>

  Ответить  
 
 автор: Fractured#   (23.11.2009 в 00:12)   письмо автору
 
   для: Patriot22   (22.11.2009 в 22:14)
 

Во-первых,
<?php
$data 
= 'login=' . urlencode($login) . '&pass=' . urlencode($password);
?>


Во-вторых, достань все cookie
<?php
if( preg_match_all('#^Set-Cookie:\\s*([^=]+)=([^;\\s]+)#m', $headers, $matches) )
{
    
$cookie_header = 'Cookie: ';

    for(
$i = 0; $i < count($matches[0]); $i++)
        
$cookie_header .= ($i ? '; ' : '') . $matches[1][$i] . '=' . $matches[2][$i];

    
$out .= $cookie_header . "\r\n";
}

[поправлено модератором]
[затем подправлено Fractured#]

  Ответить  
Rambler's Top100
вверх

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