2010-02-24 30 views
17

Theo mặc định, ASP.NET sẽ đặt cookie để sử dụng "mydomain.com" làm cơ sở của chúng. Thay vào đó, tôi muốn họ sử dụng "www.mydomain.com" để tôi có thể có các tên miền phụ "sub.mydomain.com" khác không có cookie.Cookie phiên ASP.NET - chỉ định miền cơ sở

Tôi đã thực hiện một số thao tác trong các đối tượng Phiên và Cookie và trong khi tôi có thể tìm cách đặt tên miền cho một cookie, tôi không thấy cách đặt cho tất cả cookie phiên.

Bất kỳ ý tưởng nào?

+0

Điều này trái ngược hoàn toàn với trải nghiệm của tôi. Cookie phiên mới đang được tạo mỗi tên miền phụ của tôi. Có lẽ nó đã thay đổi với một phiên bản mới hơn của ASP.NET? Tôi đang sử dụng .NET 4. –

Trả lời

19

Tạo ISessionIDManager, vì bạn chỉ muốn thay đổi tên miền cookie, chúng tôi sẽ cho phép mặc định làm tất cả công việc.

Điều này được định cấu hình trong web.config trên phần tử sessionState dưới <system.web>.

<sessionState sessionIDManagerType="MySessionIDManager" /> 

Và triển khai.

public class MySessionIDManager: SessionIDManager, ISessionIDManager 
{ 
    void ISessionIDManager.SaveSessionID(HttpContext context, string id, out bool redirected, out bool cookieAdded) 
    { 
     base.SaveSessionID(context, id, out redirected, out cookieAdded); 

     if (cookieAdded) { 
      var name = "ASP.NET_SessionId"; 
      var cookie = context.Response.Cookies[ name ]; 
      cookie.Domain = "example.com"; 
     } 
    } 
} 
+1

trông thực sự tuyệt vời, nhưng nó đã không làm việc cho tôi. Mã này có thể duy trì cùng một sessionid cho tất cả các tên miền phụ, nhưng dữ liệu của các phiên không được đọc thành công. – st78

+0

Làm việc tuyệt vời cho tôi! Cảm ơn. – spoulson

+0

Bạn cũng không nên xử lý 'GetSessionId()' và 'RemoveSessionId()' ??? – user2173353

1

Phiên sử dụng chỉ một cookie, vậy tại sao bạn không đặt tên miền chỉ cho cookie ASP.NET_SessionId?

+0

5, trên thực tế, nếu bạn bao gồm _utm .... Tất cả đều được gửi qua cho mọi yêu cầu hình ảnh tới cdn.mysite.com. Sẽ tốt hơn nếu tôi không cần phải ra ngoài và đăng ký mysitecdn.com chỉ để tránh điều đó. –

+0

Đăng ký một "miền không có nấu ăn" không quá phổ biến: [SO đã làm ví dụ này] (http://sstatic.net/). – scherand

9

Tôi nhận ra đây là một câu hỏi cũ, nhưng bạn có thể sử dụng domain thuộc tính của phần httpCookies cấu hình thay vì làm điều này trong mã?

<httpCookies domain="String" 
      httpOnlyCookies="true|false" 
      requireSSL="true|false" /> 
+1

dường như không ảnh hưởng đến cookie phiên – Tarnschaf

+0

Ah đúng, đủ công bằng :) Cảm ơn. –

+0

+1 Điều này phù hợp với tôi! Nó ảnh hưởng đến cả cookie phiên và cookie xác thực. – jkoreska

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