2012-04-11 23 views
5

Tôi đã làm việc về một vấn đề trong một ngày rưỡi vừa qua và vẫn chưa tìm được giải pháp.Ứng dụng canvas Facebook iFrame Phiên bản PHP

Khi visitng trò chơi của tôi trên facebook (trong iFrame của facebook) phiên php không hoạt động. Điều này là dành cho IE và Safari. Chrome hoạt động tốt.

Tôi đã đọc tất cả các bài đăng trên ngăn xếp về vấn đề này, dường như nằm dưới sự bảo mật cookie của bên thứ ba và cần tương tác với iFrame trước tiên. Đã có một cách giải quyết bằng cách làm cho javascript đăng một số dữ liệu biểu mẫu lên iFrame trước, nhưng điều này dường như đã được 'cố định' trong các phiên bản mới nhất của các trình duyệt rất gần đây vì điều này không còn hoạt động nữa.

Tôi thậm chí đã thử triển khai trang bắt đầu yêu cầu họ nhấp vào liên kết đầu tiên (trong iFrame) để tải trang khác mà sau đó sẽ tạo phiên. Nhưng ngay cả điều đó cũng không hiệu quả.

Tôi cũng gặp sự cố khi tải các trang mới trong iFrame bằng javascript, điều này dường như luôn gây ra các lần làm mới vòng lặp vô hạn.

Và không, tiêu đề P3P KHÔNG giải quyết được.

Có ai có giải pháp cho vấn đề này không? Tôi không thể là người duy nhất với nó, xem xét có bao nhiêu ứng dụng facebook tồn tại!

+0

bạn có chính sách p3p chính xác không? Tôi có nhiều ứng dụng FB và các vấn đề phiên luôn được giải quyết với các tiêu đề p3p chính xác – scibuff

+0

Ngay cả đối với safari? Bạn có thể cho tôi một ví dụ về tiêu đề của bạn không. Tôi nghĩ rằng tôi cắm vào: tiêu đề ('p3p: CP = "NOI ADM DEV PSAi COM NAV CỦA CHÚNG TÔI OTR STP IND DEM"'); không có kết quả. –

Trả lời

5

Tôi đã gặp phải sự cố này khi sử dụng ứng dụng khách đã tắt "Chấp nhận cookie của bên thứ ba". Giải pháp của tôi là để buộc PHP để nhúng các session ID vào URI bằng cách đặt dòng này vào lúc bắt đầu của mỗi trang:

ini_set('session.use_trans_sid', true); 

Do URLs là trong iframe trong Facebook SID không được nhìn thấy trong cửa sổ đầu.

+0

Tôi cũng đã đấu tranh với vấn đề này, và câu trả lời này dẫn tôi đến khám phá rằng tôi đã "Chấp nhận cookie của bên thứ ba" bị vô hiệu hóa. Điều này có vẻ như một vấn đề lớn tiềm năng cho tất cả mọi người vì vậy tôi ngạc nhiên điều này không được đề cập bất cứ nơi nào trong Facebook hoặc hướng dẫn khác. – Zimzat

3

Đối với IE, bạn cần đặt tiêu đề P3P. Một cái gì đó như:

<?php header('P3P: CP="CAO PSA OUR"'); ?> 

Safari chặn cookie của bên thứ ba theo mặc định. Hiện tại, công việc duy nhất đang hoạt động cho tôi là "bật lên" một cửa sổ mới để đặt cookie. Tôi có một cái gì đó như thế này:

<script type="text/javascript"> 
    function safariFix(){ 
     if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1){ 
      window.open('https://yourdomainname.com/safari.php', 'Safari Fix','width=100,height=100'); 
     } 
    } 
</script> 

safari.php sẽ có điều này:

<?php 
setcookie("safari_test", "1"); 
?> 
<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <title>Safari Fix</title> 
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 
    </head> 
    <script type="text/javascript"> 
    $(document).ready(function(){ 
     window.close(); 
    }); 
    </script> 
    <body> 
     Since Safari does not accept third-party cookies by default, we are forced to open this window. 
     This window will automatically close once we have set the cookies. 
    </body> 
</html> 

VẤN ĐỀ: này sẽ không hoạt động nếu người dùng có "khối pop-up" cho phép trong Safari. Nếu có ai có giải pháp tốt hơn cho điều này, hãy thông báo cho tôi;)

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