• 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页面中控件或者变量的值...

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

  • 相关阅读:
    C语言枚举类型(C语言enum用法)详解
    基础练习 报时助手
    怎么将CAD转JPG?教你两种CAD转JPG方法
    CAD图纸怎么看?这两种方法值得看
    某酒店建筑设计CAD施工图
    CAD怎么算面积?这种方法你要知道
    怎么将DWG转PDF?分享一个在线转换方法
    如何使用CAD删除命令?怎么删除图纸中线段
    CAD制图软件哪个好?试试这两个就知道了
    CAD制图初学入门如何学好CAD?CAD大神总结5点诀窍,必须收藏
  • 原文地址:https://www.cnblogs.com/KUDO/p/443409.html
Copyright © 2020-2023  润新知