2010-04-23 12 views
7

Tôi đã thấy một vài câu trả lời cho điều này trên SOF nhưng hầu hết trong số này đều liên quan đến việc sử dụng tên miền phụ, trong đó không có tên miền nào phù hợp với tôi. Một trong những phổ biến là việc sử dụng session.cookie_domain, mà từ sự hiểu biết của tôi sẽ chỉ làm việc với các tên miền phụ.Phiên chia sẻ PHP trên miền

Tôi quan tâm đến giải pháp đề cập đến các giao dịch có tên miền hoàn toàn khác (và bao gồm khả năng tên miền phụ). Thật không may dự án thời hạn là những gì họ đang có, thời gian không phải là về phía tôi, vì vậy tôi chuyển sang chuyên môn và kinh nghiệm của SOF.

Tóm tắt dự án hiện tại là để có thể đăng nhập vào một trang web hiện chỉ lưu trữ user_id trong phiên và sau đó có thể truy lục giá trị này trong khi trên miền khác trong cùng môi trường máy chủ. Dữ liệu phiên đang được lưu trữ/truy xuất từ ​​cơ sở dữ liệu trong đó session id là khóa chính.

Tôi hy vọng tìm được giải pháp "nhẹ" và "dễ dàng" để triển khai giải pháp.

Hệ thống đang sử dụng mẫu thiết kế Bộ điều khiển kiểu xem trong nhà, vì vậy tất cả các yêu cầu (bao gồm các miền khác nhau) đều được chạy qua một tập lệnh khởi động đơn. Sử dụng tên miền dưới dạng biến, điều này xác định ngữ cảnh nào sẽ hiển thị cho người dùng.

Một tùy chọn có vẻ như có tiềm năng là sử dụng hình ảnh bị ẩn và sử dụng thẻ alt để đặt user id. Ấn tượng đầu tiên của tôi cho thấy điều này ngay lập tức có vẻ "quá dễ dàng" (nếu có thể) và gặp phải các lỗi bảo mật. Disscuss?

Một tùy chọn khác mà tôi cho là đang sử dụng IP và Tác nhân người dùng để xác thực nhưng một lần nữa tôi cảm thấy điều này sẽ không phải là lựa chọn đáng tin cậy do mạng chia sẻ và thay đổi địa chỉ IP.

Tùy chọn thứ ba của tôi (và ưa thích) mà tôi đã xem xét và chưa được thảo luận đang sử dụng htaccess để đánh lừa người dùng nghĩ rằng họ đang ở trên miền khác khi apache không hoạt động đang chuyển hướng; cái gì đó như

www.foo.com/index.php?domain=bar.com&controller=news/categoires/1
nhưng hiển thị cho người sử dụng như
www.bar.com/news/categories/1

foo.com đại diện cho "miền trang web chính" mà tất cả các yêu cầu được chạy qua và bar.com là những gì người dùng nghĩ rằng họ đang truy cập. Yêu cầu bộ điều khiển ra lệnh cho trang và xem được yêu cầu. Điều này có thể không?

Có các tùy chọn khác không? Ưu/khuyết điểm?

Cảm ơn trước !!!

+0

Xin lỗi quên đề cập đến, tôi hiện đang chạy hệ thống tại địa phương (với XAMPP). Tôi đang sử dụng một hỗn hợp của tên miền địa phương (tập tin host chỉnh sửa) và tên miền được lưu trữ bởi fasthost để chuyển tiếp đến IP của tôi. Chỉ cần suy nghĩ đáng nói đến trong trường hợp này là ảnh hưởng đến thử nghiệm hiện tại của tôi. – bigstylee

Trả lời

-3

Vì lợi ích cho bất kỳ ai quan tâm đến chức năng này, không có câu trả lời đơn giản nào tôi sợ. Google "Đăng nhập một lần" và nó sẽ quay trở lại với công nghệ và một số giải pháp avialable.

Đối với việc sử dụng htaccess để ẩn tên miền, điều này là không thể vì nó có thể được sử dụng cho các hoạt động độc hại.

Tôi hiện đã triển khai thành công hệ thống để đạt được các yêu cầu của mình.

+1

Đây không phải là câu trả lời. Bạn không nói cho chúng tôi biết bạn đã làm gì. – Flimzy

0

Bạn đã nghĩ đến việc sử dụng session_set_save_handler. Bạn có thể lưu trữ các phiên của mình trong cơ sở dữ liệu và truy cập chúng từ bất kỳ miền nào.

+1

Tôi đang sử dụng cái này. Vấn đề là session_id được tạo bởi PHP là khác nhau cho mỗi miền. – bigstylee

+0

bạn không thể xác định người dùng theo id phiên? sử dụng một cột khác trong bảng. bạn sẽ có nhiều hàng cho mỗi người dùng nhưng bạn có thể đặt một hàng thành cùng một giá trị. Tôi chưa bao giờ làm điều này trước đây, chỉ cần ném những thứ ra khỏi đó. – Galen

+1

foo.com cung cấp id phiên của ABC123 và bar.com cung cấp id phiên của QWERTY. Trừ khi tôi so sánh IP/UserAgent không có cách nào (mà tôi biết) để biết rằng ABC123 và QWERTY đang trỏ đến cùng một người dùng. Truy vấn cơ sở dữ liệu truy xuất dữ liệu phiên là SELECT * FROM sessions WHERE session_id = "% string". Hay tôi mất điểm Youtr? – bigstylee

0
  1. Xác định một máy chủ phiên chính (Tôi làm điều này kết hợp với memcached)

  2. sử dụng Ajax/JSON (P) để yêu cầu một phiên làm việc từ máy chủ này, điều này cho phép bạn chia sẻ phiên trên nhiều lĩnh vực

  3. Tái sử dụng phiên này