2010-04-26 29 views
8

Tôi đã gặp phải tình huống mà tôi cần chuyển các biến $ _SESSION từ một tên miền sang trang iFrame từ một tên miền khác. Tôi đã dành 16 ngày cuối cùng để thử các phương pháp khác nhau để không có kết quả. Tôi nghĩ rằng cách hợp lý duy nhất là mã hóa các biến trong url gọi iFrame và giải mã chúng trong trang iFrame thứ. Tôi không chắc chắn làm thế nào để đi về điều này và tôi đang tìm kiếm bất kỳ mẫu, hỗ trợ vv mà tôi có thể tìm thấy.Làm cách nào để chuyển các biến phiên từ tên miền này sang tên miền khác trong PHP

Cảm ơn bạn về mọi đề xuất.

Dưới đây là một ví dụ về những gì tôi đang cố gắng để làm ...

Ví dụ:

<!-- 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"> 

Vì vậy, từ đây tôi nhấn iframe_test.php và cách làm như sau: Mã PHP: chức năng StripSpecChar ($ val) { trả lại (preg_replace ('/ [^ a-zA-Z0-9 "" -. @:/_] /', '', $ Val)); }

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

và tôi nhận được một mảng phiên trông như thế này: Code:

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

Tuy nhiên tất cả đều tốt cho đến nay .... gọi iFrame

Code:

<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> 

Vì vậy, làm cách nào để thực hiện ...

$_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']; 

và biến nó thành url được mã hóa mà tôi đang tìm kiếm? Hơn nữa một khi đã được thực hiện như thế nào để tôi nhận được phiên vars trở lại như phiên vars trên trang đó iFrame tên miền mới ...

+1

Tại sao bạn nghĩ bạn cần phải gửi chính xác biến phiên? tại sao không sử dụng một số phương pháp khác? Những tên miền này là gì? Bạn kiểm soát cái nào trong số chúng? họ có chia sẻ cùng một máy chủ không? –

Trả lời

0

Bạn có thể mất một mảng assoicative và chuyển đổi nó thành một chuỗi truy vấn với các chức năng http_build_query

Lưu ý: mảng thứ hai bạn đăng không phải là đầu ra chính xác của mảng phiên.

Trên trang/miền nhận, chỉ cần lấy chuỗi truy vấn và đặt/vệ sinh các thông số được mong đợi vào mảng $ _SESSION của bạn (hoặc bất kỳ điều gì bạn cần làm).

Điều này an toàn hơn so với sử dụng thứ gì đó như tuần tự hóa/unserialize vì chỉ mảng đang được sử dụng.

2

Serialize mảng sessiondata và gửi nó như một tham số và sau đó deserialize nó http://www.php.net/manual/en/function.serialize.php

+3

người đàn ông đó chỉ là khủng khiếp –

+0

Ông yêu cầu cách để làm điều đó và dường như kinda tuyệt vọng, tôi đã đưa đầu vào của tôi về chủ đề và để nó ở đó. Nếu nó là thực hành tốt hay không là tùy thuộc vào anh ta. –

1

Sử dụng serialize() và sau đó base64_encode() để vượt qua các dữ liệu mà không làm hư nó và (chủ yếu) duy trì cấu trúc của nó.

Nó không phải là một thực hành tốt, bởi vì sau đó bất cứ ai tìm ra cách nó hoạt động có thể tiêm dữ liệu tùy ý, nhưng nếu đó là những gì bạn muốn làm, nó sẽ làm việc.

+0

@Col. Shrapnel Tôi đang trả lời làm thế nào một cái gì đó có thể được thực hiện, và sau đó cung cấp các cảnh báo và lý do tại sao nó không nên được thực hiện. Tôi sẽ không nói dối và nói rằng tôi đã không sử dụng một phương pháp tương tự như bản thân mình trong quá khứ. : D Mọi người đều cần phải phạm sai lầm để học. –

+0

Ngoài ra giá trị của nó cần lưu ý rằng không có cách xấu chỉ có triển khai xấu .. oh mã di sản tôi đã viết trong những ngày của tôi nhưng chưa làm việc hoàn hảo cho những gì nó đã được intened để làm. –

1

Tại sao không chỉ gửi id phiên tới miền otehr (và giả sử họ có thể đọc cùng một nền tảng lưu trữ phiên) sử dụng id đó làm id phiên, ví dụ:

<?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

Không được kiểm tra điều này - bạn có thể buộc giá trị vào $ _COOKIE [session_name()] trước khi gọi session_start() – symcbean

Các vấn đề liên quan