2009-08-18 30 views
6

Cũng như tôi đã đăng trước đó ... Tôi đã tạo một trang web bằng hai ngôn ngữ. Một với URL www.mainDomain.com (tiếng Anh) và một với www.fr.subDomain.com (tiếng Pháp).Vấn đề trong việc duy trì phiên giữa hai miền khác nhau trên trang web được thực hiện trong CakePHP

Cả hai đều được thực hiện trong CakePHP, bằng tiếng Pháp, tôi vừa thay đổi chế độ xem thành tiếng Pháp. Nhưng vấn đề là, khi bất cứ ai đăng nhập bằng phiên bản tiếng Anh và sau đó chuyển sang phiên bản tiếng Pháp, phiên không nhận ra nó và yêu cầu đăng nhập lại. Nó đã trở thành lỗi lớn nhất trong ứng dụng Web mà tôi đã làm cho đến nay.

Vì vậy, như Swanny đã nói với tôi để đi qua a link và tôi đã làm nó trên ứng dụng của tôi như nó đã được nói trên liên kết.Apparently, nó làm việc cho đăng nhập chia sẻ phiên giữa hai tên miền (tên miền chính và tên miền phụ của nó). Nhưng khi tôi kiểm tra kỹ lưỡng, tôi nhận ra rằng cả hai trang web đều đang ném TIN TỨC mới nhất từ ​​Cơ sở dữ liệu, cả hai dữ liệu đều khác nhau. Chỉ cần kiểm tra nếu tôi đã sai, tôi đã thay đổi một số biến lưu vào cơ sở dữ liệu trong mảng phiên. Nhưng bây giờ nó từ chối nhớ bất cứ điều gì (phiên). Bất cứ ai có thể đề nghị tôi những gì có thể được vấn đề với điều này và làm thế nào tôi có thể giải quyết điều này ... ???

Cảm ơn trước

Trả lời

3

Tôi không chắc mình hoàn toàn hiểu, nhưng tôi sẽ thử. Tôi nghĩ rằng đây là về một thiết lập PHP gọi là session.cookie_domain.

Giả sử trang web của bạn có các URL sau:

Các cài đặt bạn muốn là: .example.org.

Bạn có thể điều chỉnh này trong php.ini, một file .htaccess hoặc thậm chí trong PHP bản thân:

<?php ini_set('session.cookie_domain', '.example.org'); ?> 

Nếu trang web của bạn chạy trên hai lĩnh vực hoàn toàn khác nhau, ví dụ:

... thì không có cách nào để chia sẻ cookie giữa hai miền khác nhau này.

+0

Tôi đang sử dụng ubuntu và zend framwork. Tôi nên viết mã ở đâu? Cảm ơn – NAVEED

+0

nếu bạn có example.org và sub.example.com thì sao? Điều đó có thể không? – Dobler

+1

@Dobler Các miền khác nhau? Không. Bạn cần một cây cầu - giống như một chuyển hướng của một loại nào đó để thực hiện công việc này. Hoặc bạn kéo trạng thái đăng nhập ở phía máy khách với yêu cầu tên miền chéo bằng JavaScript (ví dụ: jsonp). – Till

2

Nếu bạn có hai lĩnh vực khác nhau, tôi xin đề nghị như sau:

On "www.mainDomain.com", đặt một liên kết đến các trang web "www.fr.subDomain.com" và vượt qua các cookie trong tệp xem của bạn:

$session_cookie = $_COOKIE[Configure::read('Session.cookie')]; 
echo $html->link('See French Site', 'http://www.fr.subDomain.com/?session_key='.$session_cookie); 

Sau đó, trên trang web tiếng Pháp, thêm một chút mã để bắt chước cookie trong app_controller.php> beforeFilter().

function beforeFilter() { 
    if(!empty($this->params['url']['session_key']) { 
     // Setup variables here... 
     setcookie(Configure::read('Session.cookie'), $session_cookie, time()+360000, '/', $domain); 
     // You could use CAKE's setcookie command here. 
    } 
} 

Giờ đây, cookie khớp với nhau, bạn sẽ phải sử dụng phiên cơ sở dữ liệu hoặc phiên dựa trên tệp bánh. Đọc hướng dẫn trong core.php để thiết lập các hướng dẫn đó.

Điều này sẽ cho phép bạn chia sẻ về cơ bản cùng một phiên trên các trang web khác nhau. Tôi đang thực sự đang triển khai ACL trên nhiều trang web với một lần đăng nhập duy nhất. Nó có thể trở thành một chút khó khăn, nhưng chỉ cần làm nó từng bước, bạn sẽ làm tốt. Cũng đừng ngại nhảy vào mã cốt lõi của Cake để xem nó hoạt động như thế nào.

3

@dooltaz Đó là một giải pháp tuyệt vời. Vấn đề là bánh dường như đang đặt cookie sau tôi. Những gì tôi đã làm thay vào đó là gửi cho người dùng một phương pháp ro chuyển hướng và sau đó di chuyển các thiết lập cookie đến afterFilter

function afterFilter() { 
    if (!empty($this->params['url']['session_key'])) { 
     // Setup variables here... 
     setcookie(Configure::read('Session.cookie'), $this->params['url']['session_key'], time()+360000, '/'); 
     // Cakes cookie method will put your cookie name in [] so it does not work. 
    } 
} 

(typo Cũng cố định trong mã của bạn ..)

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