2011-02-07 9 views
5

Tôi sử dụng apache làm proxy cho máy chủ web ứng dụng của mình và muốn bay nhanh, thay đổi tên miền được liên kết với cookie phiên.Thay đổi Tên miền Cookie

Cookie có miền .company.com được liên kết với nó và tôi muốn sử dụng ghi đè apache mod (hoặc một số mô-đun tương tự), thay đổi rõ ràng tên miền thành app.company.com. Điều này có thể không? và nếu có, làm thế nào một người sẽ đi về nó?

+0

Thay đổi chính xác điểm đó? Đối với máy chủ hoặc cho khách hàng? Tôi không hiểu. –

+0

Thay đổi nó tại máy chủ. Về cơ bản, vì apache được cấu hình như một máy chủ proxy, tất cả lưu lượng giữa máy khách và máy chủ ứng dụng được định tuyến thông qua máy chủ apache. Và những gì tôi đang cố gắng thực hiện là thay đổi tên miền cookie được thiết lập bởi ứng dụng, trong proxy apache trước khi cookie đến được máy khách. –

+0

@user Tôi hiểu. Tôi nghĩ đây là loại proxy ngược lại có thể làm lớn - không biết Apache có khả năng đó hay không. Tôi vẫn không chắc tôi hiểu tại sao bạn cần điều này, mặc dù. Sẽ không có một yêu cầu gửi đi đặt cookie cho miền proxy ngay từ đầu? –

Trả lời

0

Tôi không biết bất kỳ mô-đun nào cung cấp tính năng như vậy. Vì vậy, tôi đoán bạn sẽ cần phải viết của riêng bạn output filter sử dụng mod_ext_filter thực hiện điều này cho bạn.

Nhưng nếu bạn có quyền kiểm soát máy chủ khác, có thể chỉ cần bỏ qua giá trị tên miền của cookie để khách hàng tự động chọn miền được yêu cầu làm miền của cookie.

+0

Tôi vừa mới tạo một trang trung gian thông qua javascript đã thay đổi tên miền cookie thành máy chủ proxy (bằng cách bỏ qua giá trị tên miền) và sau đó chuyển hướng người dùng đến trang đích. Điều đó dường như giải quyết vấn đề. Cảm ơn câu trả lời của bạn. –

0

Tôi vừa mới tạo trang trung gian qua javascript đã thay đổi tên miền cookie thành máy chủ proxy (bằng cách bỏ giá trị tên miền) và sau đó chuyển hướng người dùng đến trang đích. Điều đó dường như giải quyết vấn đề. Cảm ơn câu trả lời của bạn.

4

Bạn chỉ có thể thay đổi tên miền của cookie trên máy khách hoặc khi được đặt trên máy chủ. Khi một cookie đã được thiết lập, đường dẫn và thông tin miền cho nó chỉ tồn tại trên máy khách. Vì vậy, các cookie hiện tại không thể thay đổi tên miền trên máy chủ, vì thông tin đó không được gửi từ máy khách đến máy chủ.

Ví dụ, nếu bạn có một cookie mà trông như thế này trên máy tính địa phương của bạn:

MYCOOKIE:123, domain:www.test.com, path:/ 

Máy chủ của bạn sẽ chỉ nhận được:

MYCOOKIE:123 

trên máy chủ. Tại sao đường dẫn và miền không được gửi? Bởi vì trình duyệt giữ rằng thông tin về khách hàng, và doesnt bận tâm gửi nó cùng, vì nó chỉ gửi cookie này đến máy chủ của bạn nếu trang được tại www.test.com và tại đường dẫn /.

Vì đó là máy chủ của bạn, bạn sẽ có thể thay đổi mã để tạo cookie mới. Nếu bạn cảm thấy bạn cần phải làm điều đó bên ngoài mã của bạn vì lý do nào đó, bạn có thể làm như vậy với một số thứ như sau, nhưng bạn phải xem chính xác cách cookie của bạn được viết trong tiêu đề để khớp chính xác. Sau đây là một phỏng đoán chưa được kiểm tra tại một giải pháp khả thi cho việc này, sử dụng Apache mod_headers:

<IfModule mod_headers.c> 
    Header edit Set-Cookie (.*)(domain=.company.com;)(.*) $1 domain=app.company.com; $2 
</IfModule> 

Bạn cũng có thể sử dụng mod_headers thay đổi cookie nhận được từ khách hàng, như vậy, nếu cần thiết:

<IfModule mod_headers.c> 
    RequestHeader edit Cookie "OLD_COOKIE=([0-9a-zA-Z\-]*);" "NEW_COOKIE_NAME=$1;" 
</IfModule> 

Điều này sẽ chỉ đổi tên cookie bạn nhận được trong yêu cầu.

+0

Nếu không được Chỉnh sửa tiêu đề Set-Cookie (. *) (Domain = .company.com;) (. *) $ 1 domain = app.company.com; $ 3 vì bạn đang chụp 3 mẫu trong regex của mình và thay thế $ 2 (tên miền) – jamespo

+0

Điểm tốt - Tôi không có thiết lập này ở bất cứ đâu để kiểm tra, vì vậy có thể? Nhưng tôi đã làm việc này tại một thời điểm, và được sao chép vào những gì tôi có từ lúc đó. vì vậy có lẽ cả hai sẽ hoạt động? –

+0

Điều này không có tác dụng đối với tôi trong Apache. 'mod_headers' hoạt động nhưng không thể chỉnh sửa tiêu đề' Set-Cookie'. – Misko

0

Nếu ứng dụng web của bạn được chụp Host: header và sử dụng đó để xác định phần domain= cookie, bạn có thể cũng xem xét các chỉ thị Apache ProxyPreserveHost On mà chuyển tiếp các Host: tiêu đề từ khách hàng.

Điều này chỉ hoạt động nếu ứng dụng của bạn được thiết kế để giả định rằng tên miền của ứng dụng đó là bất cứ điều gì khách hàng đề xuất với tiêu đề Máy chủ. Nếu ứng dụng của bạn là một trong những điều này, điều này sẽ không chỉ khắc phục các cookie của bạn, mà còn bất kỳ URL tuyệt đối nào mà ứng dụng tạo ra, có thể giúp bạn tiết kiệm chi phí cho việc cần phải enable mod_substitute