2010-11-15 34 views
7

Tôi đang sử dụng bộ nhớ cache đầu ra cho trang web có hệ thống đăng nhập. Tôi có các trang toàn cầu có thể được truy cập bởi mọi người dùng. Các trang này được lưu trong bộ nhớ cache và cũng sử dụng trang chính.VaryByCustom không hoạt động với biến phiên

<%@ OutputCache Duration="3600" VaryByParam="none" VaryByCustom="userid" %> 

Tôi đang lưu trữ chi tiết đăng nhập người dùng trong một phiên. Tệp global.asax của tôi có tại đây:

public override string GetVaryByCustomString(HttpContext context, string arg) 
{ 
    string result = String.Empty; 
    if (arg == "userid") 
    { 
     object o = Session["UserID"]; 
     if (o != null) { result = o.ToString(); } 
    } 
    else { result = base.GetVaryByCustomString(context, arg); } 
    return result; 
} 

Tôi có một bảng điều khiển trong trang chính hiển thị cho người dùng được xác thực. Khi người dùng đăng nhập và xem trang công cộng Một người dùng khách khác cũng nhìn thấy bảng điều khiển được xác thực trên trang A. Nếu khách xem trang đầu tiên A thì người dùng được xác thực không thấy bảng điều khiển trên trang A.

Phần nào của mã của tôi sai? Tôi đang sử dụng VaryByCustom lần đầu tiên.

EDIT

Tôi đã sửa đổi global.asax của tôi như thế này nhưng không được viết trong file văn bản:

public override string GetVaryByCustomString(HttpContext context, string arg) 
{ 
    string result = String.Empty; 

    FileInfo t = new FileInfo(Server.MapPath("App_Data\\debug.txt")); 
    StreamWriter Tex = t.AppendText(); 
    Tex.WriteLine("GetVaryByCustomString: " + arg); 

    if (arg == "userid") 
    { 
     object o = Session["UserID"]; 
     if (o != null) { result = o.ToString(); } 

     Tex.WriteLine("Checked UserID: " + o + Tex.NewLine);    
    } 
    else { result = base.GetVaryByCustomString(context, arg); } 

    Tex.Close(); 

    return result; 
} 
+0

OK, tôi thấy rằng tôi không thể truy cập biến phiên hiện tại "Trạng thái phiên không có sẵn trong ngữ cảnh này". Đang cố khắc phục nó ngay bây giờ. –

Trả lời

0

Tôi nghĩ rằng có lẽ là Session [ "UserID"] đối với một số lý do luôn trả về null/hoặc một số lần trả về null, ngay cả khi người dùng được xác thực.

Kiểm tra kỹ xem bạn đã đặt trước khi chức năng này yêu cầu.

+0

Tôi thấy rằng biến phiên được thay đổi nhưng vấn đề là GetVaryByCustomString không được kích hoạt/hoạt động đúng Tôi nghĩ –

+0

@hasanGursoy Có một nơi nào đó có vấn đề, nhưng nếu Hàm được gọi, thì tham số phiên không được đặt. – Aristos

+1

@hasanGursoy Kiểm tra http://www.aspmessageboard.com/showthread.php?t=174916 – Aristos

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