PDA

Просмотр полной версии : PHP Cookies & Sessions


MiZtEriX
12.07.2005, 09:02
Помогите, пожалуйста, решить задачу:
есть такой форум phpbb, у него есть возможность закрывать разделы для разных уровней пользователей. Как на php вытащить и сохранить закрытую страницу, без использования браузера, если есть юзер/пасс имеющего туда доступ?

nerezus
12.07.2005, 09:30
Почему невозможно использование броузера?

MiZtEriX
12.07.2005, 09:49
А как его использовать, чтоб он сам запустился, авторизовался, скачал, сохранил и закрылся?

nerezus
12.07.2005, 09:59
ну тогда кури perldoc LWP::UserAgent

MiZtEriX
12.07.2005, 09:59
насчёт самозапуска, эт я неправ...
а вот кросплатфоменность нужна (вин и фря)

MiZtEriX
12.07.2005, 10:07
эээ... перл? а на пхп нельзя?
перл вообще не знаю :(

nerezus
12.07.2005, 10:25
на пхп fsockopen() и его команда =)

KEZ
12.07.2005, 11:31
ты fsockopen() знаешь?
ну так вот, попроси сервера прислать тебе страничку, неважно динамическая она или HTML. Отправь заголовки (смотрит на меня большими глазами и молчит...)
Ну блин...

$sock = fsockopen( $server, $port );
$request = "GET http://".$server.$url." HTTP/1.1\n";
$request .= "Host: ".$server."\n";
$request .= "User-Agent: вставь сюда агент\n";
$request .= "Connection: Keep-Alive\n";
fwrite( $sock, $request );
while ((!feof( $sock )) && ($l = fgets( $sock )))
{
// answer
print $l;
}

MiZtEriX
12.07.2005, 12:40
получил страничку с формой и куки
а как отпостить переменные формы и куки?

nerezus
12.07.2005, 12:57
RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1
http://rfc.net/rfc2616.html

KEZ
12.07.2005, 13:04
а как отпостить переменные формы и куки?



...
$content = "value1=1&value2=2&value3=3&blablabla=blabla\n";
$request = "POST http://".$server.$url." HTTP/1.1\n";
$request .= "Host: ".$server."\n";
$request .= "User-Agent: вставь сюда агент\n";
$request .= "Connection: Keep-Alive\n";
$request .= "Content-Type: text/html\n";
$request .= "Content-Length: ".strlen($content)."\n";
$request .= "\n".$content."\n";

fwrite( $sock, $request );
...

KEZ
12.07.2005, 13:20
точнее лутше Connection: Close

MiZtEriX
12.07.2005, 14:49
The POST method is used to request that the origin server accept the
entity enclosed in the request as a new subordinate of the resource
identified by the Request-URI in the Request-Line. POST is designed
to allow a uniform method to cover the following functions:
.....
а на практике это как всё?
вам не очень трудно написать?

KEZ
12.07.2005, 14:57
а на практике это как всё?
вам не очень трудно написать?


ну а я тебе че написал? вверху почитай - на PHP написано.
а если хочешь попрактиковаться - сделай так. скачай InetCrack+Naviscope (http://antichat.ru/inetcrack/)
и включи naviscope. теперь через IE залезь куданить и naviscope тебе покажет
какие твой браузер отправлял заголовки. а вручную их удобно отправлять InetCrack'ом

а вообще может быть тебе интересно зачем нужен GET и POST ?
так вот. когда ты пишешь в адресной строке
http://porno.com/script.php?parameter=1
тоданные из parameter передаются методом GET. тоесть в прямо в адресной строке
например script.php?a=1&b=1&c=2&d=32
Тоесть они передаются в ЗАГОЛОВКЕ HTTP запроса :
GET http//.../script.php?parameter=1 HTTP / 1.1
...

А POST метод передает данные в ТЕЛЕ запроса, их невидно в адресной строке:
GET http://script.php HTTP / 1.1
...
Content-Type: тип mime
Content-Length: размер тела

parameter=1&a=1&b=2...


Ясно стало?
Часто POST юзают там где юзер чтото отправляет на сервер.
Хотя в любом случае ответом сервера будет результат работы скрипты\чегото ещё...

MiZtEriX
12.07.2005, 15:21
<?
$file=fopen("test1.htm","w");

$url = "/index.php?pid=4";
$server = "csport";
$useragent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2)";

$fp = fsockopen("csport", 80, $errno, $errstr, 30);
if (!$fp) {
echo "Error! $errstr ($errno)<br />\n";
} else {
$out = "GET http://".$server.$url." HTTP/1.1\r\n";
$out .= "Host: ".$server."\r\n";
$out .= "User-Agent: ".$useragent."\r\n";;
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!$flag) {
$line = fread($fp,32000);
if (strstr($line, "Set-Cookie: _data")){$cukdata = substr($line, 12, sizeof($line));}
if (strstr($line, "Set-Cookie: _sid")){$cuksid = substr($line, 12, sizeof($line));}
$form=strstr($line,"<form");
if ($form){$flag=1;}
fputs ($file,$line);
}
}
fclose($file);
$file=fopen("test2.htm","w");
if ($form<>'') {
if (!$fp) {
echo "Error! $errstr ($errno)<br />\n";
} else {
echo "form finded - login\r\n\r\n";
$content = "username=test&password=test&autologin=checked&redirect=portalhome&submit=Login";
$out = "POST http://".$server."/f/login.php?login=true&amp;sid=".$cuksid." HTTP/1.1\r\n";
$out .= "Host: ".$server."\r\n";
$out .= "User-Agent: ".$useragent."\r\n";;
$out .= "Cookie: ".$cukdata."\r\n";
$out .= "Cookie: ".$cuksid."\r\n";
$out .= "Content-Type: text/html\n";
$out .= "Content-Length: ".strlen($content)."\n";
$out .= "\n".$content."\n";
$out .= "Connection: Close\r\n\r\n";
fputs($fp, $out);
while (!feof($fp)) {
$line = fread($fp,32000);
if (strstr($line, "Set-Cookie: _data")){$cukdata = substr($line, 12, sizeof($line));}
if (strstr($line, "Set-Cookie: _sid")){$cuksid = substr($line, 12, sizeof($line));}
fputs ($file,$line);
}
}
}
fclose($file);
$file=fopen("test3.htm","w");
if ($form<>'') {
if (!$fp) {
echo "Error! $errstr ($errno)<br />\n";
} else {
echo "get page\r\n\r\n";
$out = "GET http://".$server.$url." HTTP/1.1\r\n";
$out .= "Host: ".$server."\r\n";
$out .= "User-Agent: ".$useragent."\r\n";;
$out .= "Cookie: ".$cukdata."\r\n";
$out .= "Cookie: ".$cuksid."\r\n";
$out .= "Connection: Close\r\n\r\n";
fputs($fp, $out);
while (!feof($fp)) {
$line = fgets($fp);
fputs ($file,$line);
}
}
}
fclose($file);
fclose($fp);

MiZtEriX
14.07.2005, 12:50
первый файл (test1) до строки с <form
второй (test2) - его продолжение
третий вообще пустой
а должно быть: в первом форма на логон, во втором - авторизация успешна, в третьем закрытая страница
что здесь неверно? как исправить? подскажите, пожалуйста, а то уже неделю над этим бьюсь :(

KEZ
14.07.2005, 16:05
тем кто так пишет скрипты надо давать по шее.

MiZtEriX
15.07.2005, 12:53
я ж и спрашиваю, как надо?

nerezus
15.07.2005, 13:20
Надо правильно.
Мануал по пхп и Rfc 2616 в зубы и вперед на мины ;)

MiZtEriX
15.07.2005, 16:54
ну ваще... я с мануалов начал, если б там ВСЁ было написано, я б уже сделал давно...

<?
$fp = fsockopen("csport", 80, $errno, $errstr, 30);
$file=fopen("test.htm","w");
if (!$fp) {
echo "Error! $errstr ($errno)<br />\n";
} else {
$out = "GET http://csport/index.php?pid=4 HTTP/1.1\r\n";
$out .= "Accept: */*
Referer: http://csport/
Accept-Language: ru
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2)
Host: csport
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: data=a%3A2...........%7D


";
fputs($fp, $out);
while (!feof($fp)) {
$line = fgets($fp);
fputs ($file,$line);
}
echo "ok";
}
fclose($file);
fclose($fp);
?>

вот это у меня работает, когда я кук сюда копирую из браузерного
а как мне залогиница и получить свежий кук? ну не получается у меня пройти по нескольким страницам! неужто так трудно помочь?

nerezus
15.07.2005, 18:24
помочь не трудно, трудно делать работу за тех, кто не хочет сам ничего делать и ждет подачки

ладно, я помогу, дав тебе прямую ссылку на самый полный мануал:

http://rfc.net/rfc2616.html

MiZtEriX
15.07.2005, 18:40
это не помощь, послать читать мануалы может каждый...
и ссылка не на мануал, а на спецификацию
там не написано то, о чём я спрашиваю
и сам я делаю многое, подачек не жду...
кстати, подачку легче словить, чем обычных разьяснений/помощи добиться...
сказал бы просто, что лень, а то "трудно делать работу"...

nerezus
15.07.2005, 18:51
это не помощь...
А что ты ждал?

и не мануал...
Не надо вот! Это самое полное описание.

там не написано то, о чём я спрашиваю
то, что ты спрашиваешь, там написано, так как это полное описание.

и вобще, тебе уже кез на прошлой странице подобный листинг дал