file_get_contents (veya kıvırmak veya fopen) oturum verileri ile sorun

6 Cevap php

i oturumda bir değer gösteren bir sayfa var, onu www.domain-a.com/master.php arama sağlar ve ben doğrudan tarayıcı yazarsanız, bana oturum değerini gösterir.

i www.domain-b.com/slave.php gibi, başka bir etki alanından file_get_contents (ya da başka bir yöntemle) ile yüklemeye çalıştığınızda ancak, bu oturumda, sadece boş bir sayfa tarafından korunan içeriği almak değildir.

i sunucu b içeriği değil, kullanıcı almaya çalışıyor çünkü biliyorum ...

Herkes kim bilgi almak olduğunu kullanıcı olduğunu etki-a anlatmak için nasıl bilir? oturum değerini almak için bir yolu var mı?

Saygılarımızla,

José

6 Cevap

Bir yararlı çözüm vardır.

Başka bir sunucuya PHPSESSID gönderme oturum veri sunucusundaki bir dosyada saklanır, çünkü bir mantıklı ve file_get_contents http hizmeti engellemek nedeni budur değil. Bu basit. İstemci http kullanarak sunucuya bağlanmak ve sunucu tabii yazmak için oturum veri dosyası ile açılır. file_get_contents aynı sunucuya bağlanmak başka bir bağlantı (başka bir iş parçacığı) oluşturun. Session id ayarlı ise o zaman sunucu oturum verisi ile aynı dosyayı açar, ama bu dosya zaten açıldı.

işte bu çarpmayı engelleyen iyi bir çözümdür:

$opts = array( 'http'=>array( 'method'=>"GET",
              'header'=>"Accept-language: en\r\n" .
               "Cookie: ".session_name()."=".session_id()."\r\n" ) );

$context = stream_context_create($opts);
session_write_close();   // this is the key
$obsah = file_get_contents( 'http://blablabla.cz', false, $context);

gayet iyi çalışıyor. Evet evet evet

Muhtemelen isteği ile birlikte bir tanımlama kullanıcı oturum kimliğini göndermek gerekiyor.

Eğer file_get_contents fonksiyonunu kullanmak istiyorsanız, create a context bir çerez ayarlamak zorunda:

$opts = array(
    'http' => array(
        'method' => 'GET',
        'header' => 'Cookie: PHPSESSID=0123456789abcdef0123456789abcdef'
    )
);
$context = stream_context_create($opts);
echo file_get_contents('http://master.example.com/master.php', 0, $context);

Lütfen oturum kodu istemci IP adresi karşı doğrular olmadığını IP sayfanızda gönderilen istemci yerine istemci tarayıcı (curl veya file_get_contents kullanarak) istekte bulunan sunucuya bu olacak gibi, o zaman hala sorunları olabileceğini aklınızda bulundurun.

if you have control over the www.domain-a.com/master.php

o zaman şifreli bir şekilde o kullanıcı adını gönderebilir bir şekilde programlanmış olması ve benzeri master.php olabilir? user = zxcvert2324 ya da her neyse ve şifresini ve isteği kimin gönderdiğini bilemez.

Aksi takdirde CURL içine bakmak ve seans önce bu siteye kıvırmak giriş olan ve daha sonra sayfayı master.php sonraki istek Goto üzerinde yarattığı olması gerekir.

Sizin PHP yapılandırmaları muhtemelen HTTP üzerinden dosya almak için yasaklayan vardır.

Olası sanıklar:

Sen kıvrılma ile içeriği almak gerekir. this answer (muhtemelen tarayıcı parodi seçeneği bırakabilirsiniz) Bkz.