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;
}
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ờ. –