HttpContext.Current.Cache 与 HttpRuntime.Cache有什么区别?

HttpContext.Current.Cache 与 HttpRuntime.Cache有什么区别?

static ManageCache()
{
HttpContext context = HttpContext.Current;
if(context != null)
{
_cache = context.Cache;
}
else
{
_cache = HttpRuntime.Cache;
}
}

----------------------------------------

它们指的同一个对象,在某个请求其间,Page.Cache和HttpContext.Current.Cache是有效的,至于这2者的区别,一般是由你调用的地方决定的,如果在Page里,那么用Page.Cache,如果在global.asax或自己的函数里,那么用后者

但如果你需要在某个事件,譬如基于Timer的处理函数里访问,因为其时没有HttpContext,那么用HttpRuntime.Cache

-------------------------------------------

HttpContext.Current.Items和HttpContext.Current.Cache的区别是什么?

哪里有这两个东东的具体用法吗?

HttpContext.Current.Items is only good for the current request, HttpContext.Current.Cache is good as long as the cache is not expired

HttpContext.Current.Items["hello"] = object;

see how to use HttpContext.Current.Cache here:
http://www.fawcette.com/Archives/premier/mgznarch/vbpj/2001/11nov01/an0111/an0111-1.asp

HttpContext.Current.Items是针对当前Http请求的,即可以在一个http请求中共享数据,典型的用法是在一个aspx页中获得数据,然后保存在Context.Items中与当前http请求的页共享,象用户控件等。一个最好的例子是IBuyspy portal,你可以看看它的源码。而Cache中保存的数据可以在整修应用程序中使用。


但是,我看见好多程序是这样处理的
using System.Web;

namespace LukiyA.Uoo.WebUI
{
  public class Test
  {
    public static MapPath(HttpContext context, string url)
    {
      return context.MapPath(url);
    }
  }
}

HttpContext.Current表示当前HttpRequest 对应的Context对象。我的问题是:在webApplication 中,由一个页面转到 另一个页面,HttpContext.Current对象是否改变??
我发现很多程序是把登录的user信息存储到 HttpContext.Current.User 或httpContext.Current.Items中,这样看来HttpContext.Current是在整个应用进程中不改变的,不知道理解是否正确。

还有,把login user的信息存放在Context中和存放在session中各有什么好处,大家都放在什么地方。

錯.
會變得.

如果你要整個application都不變的話,那應該使用Application來存.

不过如果HttpContext.Current在页面跳转的时候会改变,为什么很多程序还用它来保存信息?
我感觉是不变的

那是為了在一個請求中共享數據.
請看例子:

http://jiezhi.cnblogs.com/archive/2005/01/12/90751.html

我好像搞明白了
httpContext.current对象只针对一个httpRequest (一个特定用户的一个特定页面),页面跳转后,该对象改变。

但httpContext.current.user 是跟thread相关的,也就是说一个特定的用户对应一个thread,即使页面跳转,httpcontext.current.user也是不变的

不知道对不对,请大家指正

每次客户发出一个httpRequest,HttpRuntime对象就会创建一个HttpContext对象,所以每次都不一样的。

谢谢大家,搞明白了
httpContext.current.user其实要存在cookie或session中,每次AcquireRequestState的时候要写代码读出来写入httpcontext才可以

htttpContext本身是无状态的,不能在页面间传递信息。

>>> httpContext.current.user其实要存在cookie或session中,每次AcquireRequestState的时候要写代码读出来写入httpcontext才可以
不在cookie或者session,直接是进程内对象。但是如果使用Forms验证,则总是通过读cookie来确定当前user。最后一个短句是对的

>>> 但httpContext.current.user 是跟thread相关的,也就是说一个特定的用户对应一个thread,即使页面跳转,httpcontext.current.user也是不变的
完全错误,这里和threading没有关系

>>> 把login user的信息存放在Context/cookie 中和存放在session中各有什么好处
session也是靠cookie实现的,而http是无状态的,so..

倒也不是说和Threading没有任何关系,实际上System.Threading.Thread.CurrentPrincipal和System.Web.HttpContext.Current.User是同步的
但是一个用户一个线程的观点绝对是错误的,如果你了解了http模型的话

-------

实际上这个类是systemframeWork处理的
1、在sysframeWork类中添加对system.web的引用
2、定义静态变量,如下
public static System.Web.HttpContext   httpContext;
3、在global.asax的Application_Start初始化httpContext
然后在数据访问层直接引用sysframeWork.httpContext.Current等就可以了

-----


有这么一个语句“Search searchform = (Search)Context.Handler;”我实在不明白。

上面这个语句很奇怪:

1.首先在源程序中没有定义Search这个类、接口、结构、枚举、enum,在msdn中也找不到这个东西。
2.其次Context这个东西我也不明白是什么东西,第一次看到,在msdn中虽然有介绍,但是看不太懂。

就是上面两个问题,请各位帮忙。

这一般是在Server.Transfer后的页面里用的

Search应该是某个基于Page的类,如果你的东西能够运行的话,这个类应该存在的,再好好查查吧,或者用IDASM.EXE打开你的DLL看看

Context是指HttpContext.Current,Handler是指Request对应的IHttpHandler ,在这里,应该是指当前Request的URL对应的页面

果然,Search是一个基于Page的类,

要在EMP.ASPX中用transfer方法,而Context.Handler的意思可以理解为当前页面AA.ASPX上一个页面的句柄..这样在source中即可以取到EMP页面中控件或者变量的值...

页面句柄,标识上一个页面用的

原文地址:https://www.cnblogs.com/KUDO/p/443409.html