2012-08-31 38 views
5

Trước đây, khi tôi cố thực hiện cuộc gọi ajax đến ashx dưới dạng tài khoản không phải superuser (ví dụ như người dùng cụ thể cổng thông tin), máy chủ web của tôi sẽ trả về cookie để xóa ủy quyền của tôi. Tôi posted a question about this và dường như câu trả lời là để đảm bảo rằng portalid=xx được chỉ định trong các tham số GET của tôi.Tại sao DotNetNuke đăng xuất tôi khi yêu cầu ajax?

Tuy nhiên, tôi vừa phát hiện ra rằng nếu tôi thêm portalid=xx vào yêu cầu POST, DotNetNuke có vẻ bỏ qua và đăng xuất bất kỳ tài khoản không superuser nào.

Làm cách nào tôi có thể giữ quyền trong yêu cầu ajax của DNN POST?

Trả lời

0

Tôi đã tìm thấy một vài điều để bạn xem và xem liệu có giải pháp nào trong số đó giải quyết được sự cố của bạn hay không.

  • Đảm bảo bạn đang sử dụng ScriptManagerProxy. Điều này cho phép các trang ascx sử dụng AJAX trong khi trang mẹ cũng sử dụng AJAX.
  • Đã có nhiều báo cáo về những người không thể chạy AJAX với DNN nếu Page State Persistence được đặt thành "Bộ nhớ". Những người trải nghiệm điều này đã có thể khắc phục nó bằng cách chuyển đổi trạng thái Persistence thành "Trang". Cách dễ nhất để làm điều này là để chạy truy vấn này:

    cập nhật HostSettings bộ SettingValue = 'P' nơi SettingName = 'PageStatePersister'

Sau khi bạn chạy đó, bạn sẽ cần phải tái chế ứng dụng. Nếu bạn không có quyền truy cập vào máy chủ, chỉ cần thêm một không gian hoặc vận chuyển trở lại tập tin web.config của bạn (mà sẽ buộc các ứng dụng để tái chế).

  • Cuối cùng, bạn có thể thấy nếu bạn có dòng này trong web.config của mình. Đôi khi loại bỏ nó sẽ giúp:

    <system.web> < xhtmlConformance mode = "Legacy"/> </system.web>

+0

Bạn đã có cơ hội xem các giải pháp khả thi này chưa? – Joshua

+0

Rất tiếc, không thể thử cho đến ngày hôm nay. Thật không may, không ai trong số những người làm việc. Tôi có lẽ cũng nên nói rằng tôi không sử dụng ASP.NET Ajax nhưng jquery để thực hiện bài viết của tôi. – KallDrexx

1

Tôi nghĩ rằng tôi có một xử lý tốt về toàn bộ tình hình , và tiếc là có vẻ như giải pháp thực sự duy nhất là đảm bảo mỗi cổng con có tên miền phụ riêng thay vì một url phụ (ví dụ: portal.domain.com thay vì domain.com/portal).

Vấn đề là khi cổng 0 của bạn là domain.com nhưng cổng 1 là domain.com/portal mọi thứ hoạt động chính xác cho đến khi bạn cần truy cập tệp .ashx qua ajax. Điều gì xảy ra sau đó là URL được yêu cầu thay vào đó là domain.com/DesktopModules/MyModule/Handler.ashx, không chứa /portal/ trong đó, do đó khiến DNN nghĩ rằng bạn đang thực hiện yêu cầu trên cổng 0 và đăng xuất bạn.

Trong khi yêu cầu GET có thể khắc phục điều này với tham số portal=1, điều này dường như không hoạt động đối với yêu cầu POST.

Vì vậy, giải pháp tốt nhất có vẻ như là có cổng thông tin của bạn trên một tên miền phụ riêng biệt (portal.domain.com), và sau đó bạn không mạo hiểm thiếu một cái gì đó như thế này.

+0

Câu trả lời này có thể nằm trong vùng lân cận chính xác của vấn đề. Mọi đăng xuất thường được gây ra bởi một tham chiếu cổng không rõ ràng trong Url, điều này làm cho yêu cầu nhận dạng sai cổng mà yêu cầu đó thuộc về. Điều quan trọng là phải hiểu chính xác khi nào đăng xuất xảy ra. Đôi khi, đó là một nhóm trong tổng số yêu cầu chuyển sang chế độ xem trang, nhưng có vẻ như bạn đã đăng xuất trên POST- khi thực tế bạn đã đăng xuất và không quan trọng yêu cầu nào sẽ xảy ra tiếp theo, nó sẽ luôn dẫn đến phản hồi không được xác thực. –

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