2010-04-26 11 views
8

Bir etki alanından $ _SESSION değişkenini başka bir etki alanından bir iFrame sayfasına geçirmem gereken bir durumla karşılaştım. Son 16 günü çeşitli yöntemlerle boşuna harcadım. Tek mantıklı yolun, iFrame çağıran ve bunları iFrame sayfasında çözen URL'deki değişkenleri kodlamak olduğunu düşünüyorum. Bunu nasıl yapacağımdan emin değilim ve bulabileceğim herhangi bir örnek, yardım vb. Arıyorum.Oturum değişkenlerini PHP'de bir etki alanından diğerine nasıl geçiririm

Önerileriniz için teşekkür ederiz. İşte

...

Örnek I yapmaya çalışıyorum şeyin bir örnektir:

burada iframe_test.php isabet ve aşağıdaki yapıyorum So
<!-- Note only using hidden as I didn't want to build the form at test phase--> 
<form name="test" method="post" action="iframe_test.php"> 
<input type="submit" name="Submit" /> 
<input type="hidden" name="fName" value="abc" /> 
<input type="hidden" name="lName" value="def" /> 
<input type="hidden" name="address1" value="ghi" /> 
<input type="hidden" name="address2" value="jkl" /> 
<input type="hidden" name="country" value="mno" /> 
<input type="hidden" name="postal_code" value="pqr" /> 
<input type="hidden" name="city" value="stu" /> 
<input type="hidden" name="retUrl" value="vwx"> 
<input type="hidden" name="decUrl" value="yz"> 

: PHP Kodu: işlevi StripSpecChar ($ val) { dönüş (preg_replace ('/ [^ a-zA-Z0-9 "" -. @:/_] /', '', $ Val)); }

foreach ($_POST as $key => $val) { 
$_SESSION[$key] = StripSpecChar($val); 
} 

ve ben şöyle bir seans dizi olsun: Kodu: Hala

Array 
(
    [fName] => abc 
    [lName] => def 
    [address1] => ghi 
    [address2] => jkl 
    [country] => mno 
    [postal_code] => pqr 
    [city] => stu 
    [retUrl] => vwx 
    [decUrl] => yz 
) 

bugüne kadar tüm iyi ....

Kod iFrame çağırır:

Attığım do NASIL Yani
<body> 
Some page stuff here 

<div align="center"><span class="style1"><strong>This is the iFrame Page</strong></span> 
</div> 
<div align="center"> 
<iframe src="https://www.other_domain.org/iframe/reserve.php" width="500" height="350" frameBorder="0"></iframe> 
</div> 

</body> 

...

$_SESSION['fName']['abc']; 
$_SESSION['lName']['def']; 
$_SESSION['address1']['ghi']; 
$_SESSION['address2']['jkl']; 
$_SESSION['country']['mno']; 
$_SESSION['postal_code']['pqr']; 
$_SESSION['city']['stu']; 
$_SESSION['retUrl']['vwx']; 
$_SESSION['decUrl']['yz']; 

ve ben arıyorum kodlanmış url çevirmek? Ben oturum, söz konusu yeni etki alanı iFrame sayfasında vars olarak oturumu geri vars nasıl yani ... yapılır Daha sonra

+1

Neden tam olarak oturum değişkeni göndermek gerekir sizce? Neden başka bir yöntem kullanmamalı? Bu alan adları nedir? Hangisini kontrol ediyorsun? aynı sunucuyu paylaşıyorlar mı? –

cevap

0

Bir assoicative dizi çekmek ve fonksiyon http_build_query

bir sorgu dizeye dönüştürmek Not: Gönderdiğiniz ikinci dizi, bir oturum dizisinin doğru çıkışı değildir.

Alıcı sayfada/etki alanında, yalnızca sorgu dizesini alın ve beklenen parametrelerini $ _SESSION dizinize (veya bununla ne yapmanız gerekiyorsa) yerleştirin/dezenfekte edin.

Yalnızca diziler kullanıldığından serialize/unserialize gibi bir şey kullanmaktan daha güvenlidir.

2

sessiondata dizi seri hale ve bir parametre olarak göndermek ve daha sonra onu bozması ve (çoğunlukla) yapısını muhafaza olmadan veri iletmek için daha sonra base64_encode() kullanımlar serialize() o http://www.php.net/manual/en/function.serialize.php

+3

Bu sadece –

+0

korkunç bir şey yaptı ve bunu yapmak için umutsuz görünüyordu, ben konu üzerine girdim verdim ve bu konuda bırakın. İyi bir uygulama ya da değil ise ona bağlı. –

1

serisini ve.

Bu iyi bir uygulama olmadığı için keyfi veri enjekte edebilir çalıştığını nasıl rakamlar, ama bu yapmak istediğiniz buysa, bu iş olacak o zaman herkes.

+0

@Col. Şarapnel Bir şeylerin nasıl yapılabileceğini yanıtlıyorum ve sonra neden yapılmaması gerektiğine dair uyarı ve muhakeme sağlıyoruz. Yalan söylemeyeceğim ve geçmişte kendime benzer bir yöntem kullanmadığımı söylüyorum. : D Öğrenmek için herkes hata yapmak zorundadır. –

+0

Ayrıca, kötü uygulamaların kötü bir yolunun bulunmadığına dikkat etmek de önemlidir .. oh benim günlerimde yazdığım, ancak ne yapması gerektiğine dair kusursuz bir şekilde çalıştığım hegemik kod. –

1

sadece (ve aynı oturum depolama substratı okuyabilir varsayarak) kullanmak otehr etki alanına oturum kimliğini göndermez Neden orada oturumu kimliğiyle, örneğin

<?php 
// catch remote session id, validate and reassociate 
if (md5($_GET['exported_sessid'], $shared_secret) == $_GET['check_hash']) { 
     // (basic CSRF check 
     session_id($_GET['exported_sessid']); 
} 
session_start(); 
.... 

C.

+0

Bunu test etmediniz - session_start() öğesini çağırmadan önce değeri $ _COOKIE [session_name()] 'a zorlamak zorunda kalabilirsiniz. – symcbean