精华内容
下载资源
问答
  • wanphp-plugin-about 帮助、介绍等文章类信息
  • Cache的概述及用法和帮助类,cache与session,cookie的区别,cache帮助类

    Cache的概述及用法和帮助类:

      Cache 即高速缓存.那么cache是怎么样提高系统性能与运行速度呢?是不是在任何情况下用cache都能提高性能?是不是cache用的越多就越好呢?
      Cache 是怎么样工作的?
      Cache 是分配在服务器上的一个公共的内存片。
      所谓公共指的cache只要一创建是任何一个客户端浏览器都可以通过后台代码访问到它,它面向的是所有用户,相对而言session也是服务器上的一 段内存,但他面向的是单个用户。它是服务器的一段内存块,也就是说每个cache一经创建就占用了服务器资源的。所以从这点来说我们就可以说:并不是 cache越多越好。  
      cache 是有时间限制的,超过了服务器设定的过期时间,它就会被服务器回收。
      cache 可以存放任何对象

         Cache支持装箱/拆箱操作。如你可以把一个DataSet对象ds通过Cache.Insert(“dsCache”,ds)的方式存到Cache中,可以通过拆箱操作 DataSet ds = (DataSet)Cache[“dsCache”]来访问它。

         Cache 一般用于数据较固定,用的较频繁的地方。

        Cache是有时间限制的。超过了服务器设置的过期时间,就会被服务器回收。当cache被回收后对应的内存块就会被清空,再次通过cache[“cachekey”]访问对象时返回的就是null值。


    web站点中缓存的重要性毋庸置疑。我想很多.net开发人员在开发web应用系统的时候优先考虑使用的缓存并不是第三方缓存解决方案(比如 分布式缓存memcached、redis等等),而应该是.net framework已经提供的多种缓存解决方案。下面谈谈对.net framework中缓存的认识。

    1、System.Web.Caching.Cache

    估计大部分做过asp.net开发的人都用过这个命名空间下的缓存,我们可以直接使用HttpContext.Current.Cache实例而不 用实例化。当然这个命名空间下的Cache类是允许您实例化的,需要定制自己的缓存系统的当然可以完全自己控制如何初始化这个类。我在园子里看到过有很多 文章介绍Cache的CRUD辅助类库大多数都是针对System.Web.Caching.Cache。

    需要说明的是,我们还可以通过该命名空间下的HttpRuntime.Cache实现web、控制台、winform等不同表现形式下的缓存,而且 完全无需自己实例化。HttpRuntime.Cache是之前个人开发中使用比较多的一个类,现在比较偏爱.net framework4.0中的增强型的缓存类MemoryCache。

    2、Output Cache

    众所周知,输出缓存主要分页面输出缓存和页面部分缓存。说白了,就是缓存整个页面的html或者部分html,没什么值得讨论的。

    3、System.Runtime.Caching

    现在开发中使用最多的类MemoryCache出自这个命名空间,使用前需要引用using System.Runtime.Caching。MemoryCache继承自ObjectCache, IEnumerable, IDisposable,其中ObjectCache是个抽象类。用过MemoryCache的人都知道,这个MemoryCache有一个属性叫 Default,通常可以像下面这样使用:

    private static ObjectCache memCache = MemoryCache.Default;
    当然我们也完全可以通过public MemoryCache(string name, NameValueCollection config = null)构造函数初始化缓存对象。

    接着我们可以在web.config文件中配置每个MemoryCache实例运行的内存使用配额方案和配额检查周期,下面示例参考MSDN:

    <system.runtime.caching>
    <memoryCache>
    <namedCaches>
    <add name=”Default” cacheMemoryLimitMegabytes=”10″ pollingInterval=”00:02:00″/>
    </namedCaches>
    </memoryCache>
    </system.runtime.caching>

    这些配置意义在于可以明确指定每个MemoryCache实例运行的内存使用配额方案和配额检查周期。比如我们可以通过配置来按需更改 MemoryCache.Default实例的内存配额(不知道缓存可用最大内存是多少,可能还是传说中的800M左右)。缓存过期策略与其它的缓存框架 大同小异,与System.Web.Caching.Cache的不同只是名称不叫CacheDependency,而叫ChangeMonitor,并且提供了基于文件和目录的缓存依赖策略。关于缓存过期策略也比较有探讨的必要,不过个人开发中比较偏重于数据缓存和替换,目前还没有接触和使用过比较完美的过期策略解决方案。


    以下是帮助类:

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Caching;
    using System.Web.Hosting;
    namespace ECS.Utility
    {
    /// <summary>
    /// Caching 的摘要说明
    /// </summary>
    public class CacheHelper 
    {
    
    /// <summary>
    /// 获取当前应用程序指定CacheKey的Cache值
    /// </summary>
    /// <param name="CacheKey">
    /// <returns></returns>y
    public static object GetCache(string CacheKey)
    {
    System.Web.Caching.Cache objCache = HttpRuntime.Cache;
    return objCache[CacheKey];
    }
    
    /// <summary>
    /// 设置当前应用程序指定CacheKey的Cache值
    /// </summary>
    /// <param name="CacheKey">
    /// <param name="objObject">
    public static void SetCache(string CacheKey, object objObject)
    {
    System.Web.Caching.Cache objCache = HttpRuntime.Cache;
    objCache.Insert(CacheKey, objObject);
    }
    
    
    /// <summary>
    /// 设置当前应用程序指定CacheKey的Cache值
    /// </summary>
    /// <param name="CacheKey">
    /// <param name="objObject">
    public static void SetCache(string CacheKey, object objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration)
    {
    System.Web.Caching.Cache objCache = HttpRuntime.Cache;
    objCache.Insert(CacheKey, objObject, null, absoluteExpiration, slidingExpiration);
    }
    
          /// <summary>  
          /// 设置数据缓存  
          /// </summary> 
          public static void SetCache(string CacheKey, object objObject, int timeout = 7200)  
          {  
              try  
             {  
                  if (objObject == null) return;  
                  var objCache = HttpRuntime.Cache;  
                 //相对过期  
                 //objCache.Insert(cacheKey, objObject, null, DateTime.MaxValue, timeout, CacheItemPriority.NotRemovable, null);  
                  //绝对过期时间  
                 objCache.Insert(cacheKey, objObject, null, DateTime.Now.AddSeconds(timeout), TimeSpan.Zero, CacheItemPriority.High, null);  
              }  
              catch (Exception)  
              {  
                //throw;  
              }  
          } 
    /// <summary>
    /// 清除单一键缓存
    /// </summary>
    /// <param name="key">
    public static void RemoveKeyCache(string CacheKey)
    {
    try
    {
    System.Web.Caching.Cache objCache = HttpRuntime.Cache;
    objCache.Remove(CacheKey);
    }
    catch { }
    }
    
    /// <summary>
    /// 清除所有缓存
    /// </summary>
    public static void RemoveAllCache()
    {
    System.Web.Caching.Cache _cache = HttpRuntime.Cache;
    IDictionaryEnumerator CacheEnum = _cache.GetEnumerator();
    if (_cache.Count > 0)
    {
    ArrayList al = new ArrayList();
    while (CacheEnum.MoveNext())
    {
    al.Add(CacheEnum.Key);
    }
    foreach (string key in al)
    {
    _cache.Remove(key);
    }
    }
    }
    /// <summary>  
        /// 清除所有缓存
        /// </summary>  
        public static void RemoveAllCache()  
        {  
            var cache = HttpRuntime.Cache;  
            var cacheEnum = cache.GetEnumerator();  
            while (cacheEnum.MoveNext())  
            {  
                cache.Remove(cacheEnum.Key.ToString());  
            }  
        } 
    /// <summary>
    /// 以列表形式返回已存在的所有缓存 
    /// </summary>
    /// <returns></returns> 
    public static ArrayList ShowAllCache()
    {
    ArrayList al = new ArrayList();
    System.Web.Caching.Cache _cache = HttpRuntime.Cache;
    if (_cache.Count > 0)
    {
    IDictionaryEnumerator CacheEnum = _cache.GetEnumerator();
    while (CacheEnum.MoveNext())
    {
    al.Add(CacheEnum.Key);
    }
    }
    return al;
    }
    
    
    }
    }


      

    C#缓存主要是为了提高数据的读取速度。因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大提高程序的性能。

    cache与session,cookie的区别:

    session把数据保存在服务器端,每一个用户都有属于自己的Session,与别人的不冲突
    就是说,你登陆系统后,你的信息(如账号、密码等)就会被保存在服务器上一个单独的session中,当你退出系统后服务器就会丢掉这个session,你的数据也就没了,必须再次登陆,如果登陆超时也会被丢掉,要看人家系统是怎么设置的了
    Cookie同session一样是保存你个人信息的,不过是保存在客户端,也就是你使用的电脑上,并且不会被丢掉,除非你删除浏览器Cookie
    Cache是保存系统上的信息的,因为从Cache中读数据比较快,有些系统(网站)会把一些经常被使用的数据放到Cache里,提高访问速度,优化系统性能 
    session和cookie是面向单个用户的,cache是面向的是所有用户。
    End。。。



    展开全文
  • 博客帮助文档

    万次阅读 多人点赞 2019-12-10 16:52:31
    博客积分规则 博客等级 ...Markdown帮助 博客积分规则 博客积分是CSDN对用户努力的认可和奖励,也是衡量博客水平的重要标准。博客等级也将由博客积分唯一决定。积分规则具体如下: 1、每发布一篇...

    目录

    博客积分规则

    博客等级

    C币规则(试运营)

    博客VIP文章说明

    博客专家

    如何成为博客专家?

    企业博客

    如何开通企业博客

    博客勋章

    分类专栏

    博客搬家

    CSDN博客用户准则

    总则:

    博客注册

    博客行为规则

    被投诉侵权用户处理规则

    附则

    博客评论活跃等级规则(试运营)

    Markdown帮助

    付费专栏开通规则


    博客积分规则


    博客积分是CSDN对用户努力的认可和奖励,也是衡量博客水平的重要标准。博客等级也将由博客积分唯一决定。积分规则具体如下:

    • 1、每发布一篇原创或者翻译文章:可获得10分;
    • 2、每发布一篇转载文章:可获得2分;
    • 3、博主的文章每被评论一次:可获得1分;
    • 4、每发表一次评论:可获得1分(自己给自己评论、博主回复评论不获得积分);
    • 5、博文阅读次数每超过100次:可获得1分,阅读加分最高加到100分,即文章点击上万次截止;
    • 6、文章被管理员或博主本人删除,相应减去博主基于该篇博文所获得的分数;
    • 7、评论被管理员或博主删除,相应减去发评论者和博主基于该评论各自获得的分数(博主应减积分不会动态实时去掉,是每周固定时间清理一次);
    • 8、另外会开设相应的抄袭举报功能,一旦举报证实某篇原创文章抄袭,将扣除博主该篇文章相应的得分。

    博客等级


    图标等级所需积分
    L10
    L2100
    L3400
    L4800
    L51600
    L64500
    L79000
    L825000
    L950000
    L10100000
    L11200000
    L12300000
    L13500000
    L14800000
    L151000000

    C币规则(试运营)


    什么是C币

    查看详细C币规则

    博客VIP文章说明


    博主专享福利,发付费文章后可获得返利。

    VIP文章即读者购买VIP付费后才可解锁阅读的文章,拥有VIP文章发表权限的作者可以发表VIP文章。

    发VIP文章,根据文章购买转化数据返利(详见收益中心:https://order.csdn.net/myorder/revenue

    如何取消VIP可读:进入该篇文章的编辑页面,在“发布形式”模块取消选择“VIP可见”重新发布

    博客专家


    “博客专家”是CSDN给予质量较高、影响力较大的IT类博客的荣誉称号,代表了CSDN官方对其博客的肯定。

    成为博客专家后会得到什么:

    • 用户头像上显示“专家”勋章;
    • 发布博客时可以直接引用CSDN站外的图片;
    • 有机会免费参加CSDN举办的各种会议;
    • 有机会成为CSDN学院讲师、CSDN博乐、CSDN问答导师等;
    • 有更多演讲机会,CSDN会推荐给厂商或者各种IT技术大会作为演讲嘉宾;
    • 享有月度原创奖励,C币、图书或定制礼品;
    • 享有自定义模块、自定义域名、全站免广告等权益;
    • 文章获得更多的推荐机会:博客专家所发的文章都会进入文章预选库,我们有专门的编辑负责从中筛选优质内容,并推荐到CSDN首页或其他内容频道。

    注意情况:

    • 所有博客专家(包括荣誉专家)均为实名制;
    • CSDN博客专家在三个月内如果没有发布任何原创或翻译博文,其博客专家身份将自动取消,转为博客频道荣誉专家,不能继续享有博客专家的福利;
    • CSDN博客专家不是CSDN博客的全职或兼职管理人员,不具备CSDN博客的管理权力,其观点及行为仅代表个人,不代表CSDN官方立场;
    • CSDN博客专家如有违反CSDN网站规则的行为,如大量发布广告或软文,对CSDN网站造成不良影响等,将永久取消其CSDN博客专家身份;希望恢复博客专家身份可重新申请,点击这里申请博客专家

    如何成为博客专家?


    申请CSDN博客专家应具备的条件:

    1. 在CSDN坚持写作三年及以上;
    2. 原创技术文章总数超过100篇,并且最近6个月内有一定的活跃度;
    3. 博客文章总浏览量超过20万次以上,同时参考点赞、评论、收藏等交互数据;
    4. 原创文章占比80%以上,且文章内容有一定深度;
    5. 企业、团队等非个人开设的博客,需要原创技术文章总数超过150篇,并且最近一个月内发布了新的原创技术文章,博文总浏览量超30万次才能申请博客专家;
    6. 其他情况:
    • 在CSDN学院成功发布过课程的博主可适当放宽要求;
    • 如果已经在某IT领域具有较大影响力,但是尚没有达到上述申请条件的用户,可以通过现有博客专家或者CSDN编辑部的推荐,暂时成为“特约专家”,待达到上述条件之后,再转为正式的博客专家(申请用户自成为“特约专家”后六个月内如仍未达到CSDN博客专家应具备的条件,则“特约专家”身份取消)。

    CSDN已开通博客专家在线申请功能,点击这里申请博客专家

    企业博客


    CSDN企业博客旨在利用CSDN站内流量、内容、用户等资源,为技术型企业提供营销推广平台
    企业博客免费版主要功能如下:

    1、优质企业博文可提高推荐权重;

    2、支持设置自定义主题图,方便更换企业品牌形象及广告图;

    3、企业博客内无联盟广告展示;

    4、企业博客有专属身份标识;

    5、企业博客内的相关推荐内容为该企业自己的博文;

    6、支持设置自定义背景色,支持添加自定义链接导航(目前最多可添加五个);

    7、支持百度关键词查询;

    8、搜索专区。

    如何开通企业博客


    企业博客已经开通在线申请功能,点击这里开通企业博客

    CSDN管理员在收到您的申请后,会在2个工作日内开通服务。如有问题可以直接发信至tobblog@csdn.net咨询。

    博客勋章


     博客专家

    CSDN给予质量较高、影响力较大的IT类博客的荣誉称号,代表了CSDN官方对其博客的肯定。成为博客专家后会得到我们一系列的服务,如在头像上加象征荣誉的专家勋章、有专人对接提供服务、文章获得更多的推荐机会、不定时获得CSDN的礼品、优先获得CSDN举办的各种会议的的门票等。

    博客之星 博客之星

    授予在“CSDN年度博客之星评选”中获得“博客之星”称号的用户。为了鼓励专业、乐于分享的广大CSDN博客用户。每年12月的CSDN博客之星评选中,综合专家评审和大众投票的结果,评选出“CSDN年度博客之星”。

    勋章icon 1024勋章

    #1024程序员节#活动勋章,当日发布原创博客即可获得

    1024超级勋章 1024超级勋章

    授予原创文章总数达到1024篇的博主,感谢你对CSDN社区的贡献,CSDN与你一起成长。

    勋章icon 勤写标兵Lv1

    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。

    勋章icon 勤写标兵Lv2

    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。

    勋章icon 勤写标兵Lv3

    授予每个自然周发布7篇到8篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。

    勋章icon 勤写标兵Lv4

    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。

    分类专栏


    分类专栏是把相同标签属性的技术博文聚集起来,集中展示,系统全面,更具目标性。CSDN鼓励每位博主撰写专属自己的专栏博文,构建自己的知识体系。

    发布分类专栏建议:

    1. 每个专栏至少发布10篇原创技术博文。

    2. 博文紧扣专栏主题,技术定位清晰,内容扎实详尽。

    CSDN博客频道编辑定期会把精华分类专栏荐给相应的受众群体。

    博客搬家


    CSDN是IT技术网站,欢迎大家发布原创或翻译IT技术类博客,非IT技术类博客将不提供搬家服务。博主可以点击这里申请博客搬家。

    CSDN推出博客搬家功能,目前支持以下站点的博客搬迁:博客园,微信公众号,简书,51CTO.com,新浪,开源中国,chinaUnix,个人博客,掘金,GitHub,知乎,segmentfault

    温馨提示:

    • 原创技术文章不能少于10篇方可申请。
    • 原博客数据不会丢失,仍然保留。
    • 如果检测到恶意导入,您的博客使用将会受到影响。
    • 审核通过的搬家申请,会持续与搬家源进行内容同步(个人博客和github同步历史文章)。
    • 审核时间一般为1个工作日,审核结果将通过站内信等方式告知。
    • 同一个站点只允许进行1次搬家申请,如申请失败则需要重新申请。

    对博客搬家有任何问题或建议请向博客客服邮箱发邮件咨询:webmaster@csdn.net。

    声明:CSDN用户要完成博客搬家需要承诺搬迁的博客为用户本人博客,如搬迁非用户本人博客所产生的后果由用户本人承担。


    CSDN博客用户准则


    总则:

    第1条 CSDN博客隶属于CSDN(包括CSDN网站与相应客户端、自媒体平台、主运营网站等),是为中国的软件开发者、IT从业者及其他人员提供以交流IT技术为主的网络社区。

    第2条 为保障CSDN博客健康发展,维护用户正当权益,规范信息发布行为,依据国家有关法律、法规、政策及CSDN相关规定,制定本博客用户准则(以下称“本准则”)。

    第3条 CSDN经营者(即北京创新乐知网络技术有限公司及其他相关联的公司)无法对用户传播内容的权属、合法性、真实性、科学性、完整性等问题进行实质审查,博客用户须对自己发布的内容独立承担责任,CSDN经营者不承担因此产生的任何法律责任。

    第4条 为保障CSDN博客的专业性与集成性,博客用户的交流不得涉及任何政治话题,CSDN博客用户须严格按照本准则的规定行使权利和履行义务。

    博客注册

    第1条 拟注册用户在CSDN博客进行注册时,需要按照提示填写详尽的用户信息(包括但不限于姓名或名称、身份证号码、邮箱、联系方式等),并对提供信息的真实性负责。在用户信息发生变动时,用户有责任及时更新、修改信息。如果博客用户提供的信息资料不准确,CSDN经营者保留终止用户使用CSDN博客提供的相关网络服务的权利。

    第2条 CSDN博客用户因提供用户信息不真实、不准确等而发生纠纷或需要帮助时,因不能确认用户身份及其帐号的使用权利,无法向用户提供相应的帮助所带来的一切后果由用户自己承担。

    第3条 CSDN经营者尊重用户隐私,未经用户合法授权,不会公开或透露其注册资料。

    第4条 用户注册并激活成功后,便成为CSDN博客的正式用户,正式博客用户拥有CSDN博客规定用户所应享有的一切权限。用户将获得一个用户名和密码,用户对自己的用户名、密码及帐号安全性负全部责任。用户同意,若发现任何非法使用帐号、密码或存在安全漏洞等其它有损用户利益的情况,应立即通知CSDN经营者。每个用户都应对以其用户名进行的所有活动和事件负全部责任。

    博客行为规则

    第1条 CSDN博客用户享有言论自由的权利,但不得违反法律法规及政策规定,不得违反诚实信用原则及公序良俗,不得损害国家、CSDN经营者及第三方权利及利益,不得违反CSDN用户协议及相关规则。严禁发表含有下列内容的信息:

    • 1.违反宪法确定的基本原则的;
    • 2.危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的;
    • 3.损害国家荣誉和利益的;
    • 4.煽动民族仇恨、民族歧视,破坏民族团结的;
    • 5.破坏国家宗教政策,宣扬邪教和封建迷信的;
    • 6.散布谣言,扰乱社会秩序,破坏社会稳定的;
    • 7.散布淫秽、色情、赌博、暴力、恐怖或者教唆犯罪的;
    • 8.侮辱或者诽谤他人,侵害他人合法权益的;
    • 9.煽动非法集会、结社、游行、示威、聚众扰乱社会秩序的;
    • 10.以非法民间组织名义活动的;
    • 11.可能教唆他人犯罪的;
    • 12.可能损害CSDN经营者名誉或商誉等权益的;
    • 13.其他违反中华人民共和国法律、法规、政策,违反诚实信用及公序良俗,或CSDN经营者认为不当及不宜传播的信息。 CSDN博客用户违反上述规定的,CSDN经营者有权在不通知用户的情况下,根据其独立判断,采取删除已发表言论,暂停账户使用,直至取消用户资格等措施。

    第2条 CSDN博客用户发表的文章、言论或其他信息仅代表其自身观点与立场,CSDN经营者不对用户发表内容的准确性、合法性、完整性负责。博客用户须承担一切因自己的行为而直接或间接导致的民事、行政或刑事法律责任。在任何情况下,CSDN经营者不承担因用户发表内容而引起的任何损失、损害的法律责任。

    第3条 CSDN博客用户不得发布非IT技术内容。

    第4条 未经CSDN经营者同意,禁止在博客发布与CSDN提供服务无关的广告。博客管理规则

    第1条 CSDN博客的管理权限由博客管理员享有,博客管理员由CSDN经营者正式全职员工担任,并由其按照相关法律、法规、政策以及CSDN规则行使本博客全部站务管理职责和权利,管理员代表本博客官方立场,除管理员之外的任何用户及网友言论或行为,由相关人员自行承担,均与本博客无关。

    第2条 用户恶意破坏CSDN博客版块正常秩序(包含但不限于恶意投票、刷流量、刷评论、利用自定义栏目传播病毒、垃圾广告、非法信息等)的,CSDN经营者有权视情节轻重给予警告、删帖、暂停账号使用、注销帐号等处理,并依法追究民事责任及其他法律责任。

    被投诉侵权用户处理规则

    第一次:封杀,解封时要求文章改为转载并注明出处

    第二次:封杀一个月,给予严重警告,解封时要求文章改为转载并注明出处

    第三次:不予解封

    附则

    第1条 CSDN提示博客用户,在用户与通过博客相识的其他用户进行交往时,应遵循谨慎原则。对于博客用户之间相识、交往所发生或可能发生的任何心理、身体上的伤害和经济上的损失与纠纷,由相关用户自行承担一切法律责任,CSDN经营者不承担任何法律责任。

    第2条 本准则如存在与国家法律、法规或司法解释、政策等有冲突的条款,以届时有效的国家法律、法规或司法解释、政策等为准。本准则的其余条款仍然有效并具有约束力。

    第3条 CSDN经营者有权对本准则进行修改,相关条款修改后,CSDN经营者将在相关页面公布修改的内容,修改后的条款一经公布即有效的代替原条款。用户如不同意相关条款的修改,可立即停止访问或使用CSDN博客或取消已经获得的服务;如用户选择在本准则修改后继续访问或使用CSDN博客,则视为用户已接受相关条款的修改。

    第4条 用户接受本准则的内容,并不能完全涵盖用户使用CSDN博客所产生的权利和义务,CSDN经营者公布的其他声明、规则等均视为本准则之补充条款,为本准则不可分割的组成部分,与本准则具有同等法律效力。

    第5条 本准则自发布之日起生效。

    第6条 本准则最终解释权归北京创新乐知网络技术有限公司所有。

    博客评论活跃等级规则(试运营)


    评论活跃等级是CSDN对用户在博客评论区活跃程度的辨别标准,旨在鼓励读者和博主互动交流,提高用户活跃度。活跃等级规则具体如下(该规则适用于所有用户):

    • 1、所有用户初始评论次数均为零

    • 2、活跃等级用评论次数衡量,评论次数越多,等级越高

    • 3、超过10天没有进行任何评论,等级称谓变成“潜水”,初始评论次数清零

    • 4、发布评论且审核通过后计算当前的有效评论数,根据当前的有效评论数展示不同的“评论等级称谓”

    • 5、该规则从2020年4月23日起开始执行,在此之前进行的评论不予计算,仅计算该日期以后进行的有效评论

    • 以下是评论次数对应的评论等级称谓

    评论等级称谓评论次数区间
    潜水0次
    码哥1-3次
    码农4-7次
    码工8-15次
    码皇16-31次
    码神32-63次
    爱码士64次以上


    Markdown帮助


    # 欢迎使用Markdown编辑器写博客

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

    撤销:Ctrl/Command + Z

    重做:Ctrl/Command + Y

    加粗:Ctrl/Command + B

    斜体:Ctrl/Command + I

    标题:Ctrl/Command + Shift + H

    无序列表:Ctrl/Command + Shift + U

    有序列表:Ctrl/Command + Shift + O

    检查列表:Ctrl/Command + Shift + C

    插入代码:Ctrl/Command + Shift + K

    插入链接:Ctrl/Command + Shift + L

    插入图片:Ctrl/Command + Shift + G

    标题

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

    # 1级标题

    ## 2级标题

    ### 3级标题

    #### 四级标题

    ##### 五级标题

    ###### 陆级标题

    文本样式

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

    *强调文本* _强调文本_

    **加粗文本** __加粗文本__

    ==标记文本==

    ~~删除文本~~

    > 引用文本

    H~2~O is是液体。

    2^10^ 运算结果是 1024。

    列表

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

    - 项目

    * 项目

    + 项目

    1. 项目1

    2. 项目2

    3. 项目3

    - [ ] 计划任务

    - [x] 完成任务

    链接

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

    链接: [link](https://mp.csdn.net).

    图片: ![Alt](https://avatar.csdn.net/7/7/B/1_ralf_hx163com.jpg)

    带尺寸的图片: ![Alt](https://avatar.csdn.net/7/7/B/1_ralf_hx163com.jpg =30x30)

    代码片

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

    下面展示一些 `内联代码片`。

    ```

    // A code block

    var foo = 'bar';

    ```

    ```javascript

    // An highlighted block

    var foo = 'bar';

    ```

    1. 代码片必须手动声明代码语言类型

    2. 目前支持代码类型: `markup`、`html`、`svg`、`xml`、`c`、`clike`、`cpp`、`csharp`、`java`、`vbnet`、`go`、`ruby/rb`、`python/py`、`php`、`sql`、`perl`、`objectivec`、`swift`、`javascript/js`、`css`、`handlebars`、`bash`、`kotlin`

    3. 代码片主题

    默认主题为:Atom One Dark

    可以前往 [**写作中心/博客设置**](https://mp.csdn.net/configure) 在**代码片样式**项进行更改

    表格

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

    项目 | Value

    -------- | -----

    电脑 | $1600

    手机 | $12

    导管 | $1

    | Column 1 | Column 2 |

    |:--------:| -------------:|

    | centered 文本居中 | right-aligned 文本居右 |

    自定义列表

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

    Markdown

    : Text-to-HTML conversion tool

    Authors

    : John

    : Luke

    注脚

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

    一个具有注脚的文本。[^1]

    [^1]: 注脚的解释

    注释

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

    Markdown将文本转换为 HTML。

    *[HTML]: 超文本标记语言

    KaTex 数学公式

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

    Gamma公式展示 $\Gamma(n) = (n-1)!\quad\forall

    n\in\mathbb N$ 是通过 Euler integral

    $$

    \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.

    $$

    新的数学公式使用了KaTex,其语法与 LaTex基本一致,但也有一些不同的地方,具体请参考KaTex官方使用文档: [https://katex.org/docs/supported.html](https://katex.org/docs/supported.html)

    插入甘特图

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

    ```mermaid

    gantt

    dateFormat YYYY-MM-DD

    title Adding GANTT diagram functionality to mermaid

    section 现有任务

    已完成 :done, des1, 2014-01-06,2014-01-08

    进行中 :active, des2, 2014-01-09, 3d

    计划中 : des3, after des2, 5d

    ```

    插入UML图

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

    ```mermaid

    sequenceDiagram

    张三 ->> 李四: 你好!李四, 最近怎么样?

    李四-->>王五: 你最近怎么样,王五?

    李四--x 张三: 我很好,谢谢!

    李四-x 王五: 我很好,谢谢!

    Note right of 王五: 李四想了很长时间, 文字太长了
    不适合放在一行.

    李四-->>张三: 打量着王五...

    张三->>王五: 很好... 王五, 你怎么样?

    ```

    插入Mermaid流程图

    --------

    ```mermaid

    graph LR

    A[长方形] -- 链接 --> B((圆))

    A --> C(圆角长方形)

    B --> D{菱形}

    C --> D

    ```

    插入Flowchart流程图

    -------

    ```mermaid

    flowchat

    st=>start: 开始

    e=>end: 结束

    op=>operation: 我的操作

    cond=>condition: 确认?

    st->op->cond

    cond(yes)->e

    cond(no)->op

    ```

    付费专栏开通规则


    付费专栏是博主根据自己想变现的意愿而选择的一项可变现的产品,开通付费专栏事项须知:

    • 付费专栏开通提交前,请认真阅读《CSDN付费专栏写作协议》,知晓双方的权利与义务
    • 专栏文章需为原创文章且不少于15篇,每篇文章字数不得少于5000字(包括代码片段内字符数量)
    • 专栏申请需提交审核,审核时间1-2个工作日
    • 专栏定价,博主可以按照从系统已设定好的价格里选择定价
    • 确保专栏内容无违规、违法、广告等不当内容
    • 专栏一旦设置为收费,审核通过以后,无法取消,请谨慎操作

    展开全文
  • JWT 帮助类 JWTHelper

    千次阅读 2019-08-20 17:24:01
    /// JWT操作帮助类 /// public sealed class JWTHelper { /// /// 签发Token /// /// 载荷 /// <returns></returns> public static string GetToken(JWTPlayloadInfo playload) { string token = ...

    JWTPlayloadInfo.cs 代码如下:

        /// <summary>
        /// JWT载荷实体
        /// </summary>
        public sealed class JWTPlayloadInfo
        {
            /// <summary>
            /// jwt签发者
            /// </summary>
            public string iss { get; set; } = "Berry.Service";
            /// <summary>
            /// jwt所面向的用户 UserId
            /// </summary>
            public string sub { get; set; } = "";
            /// <summary>
            /// 接收jwt的一方 
            /// </summary>
            public string aud { get; set; } = "";
            /// <summary>
            /// jwt的签发时间
            /// </summary>
            public string iat { get; set; } = Utils.FormatDate(DateTime.Now, "1");
            /// <summary>
            /// jwt的过期时间,这个过期时间必须要大于签发时间.默认60分钟
            /// </summary>
            public string exp { get; set; }
            public TimeSpan daySpan { get; set; }
            /// <summary>
            /// 定义在什么时间之前,该jwt都是不可用的.
            /// </summary>
            public int nbf { get; set; }
            public string ip { get; set; }
            /// <summary>
            /// jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
            /// </summary>
            public string jti { get; set; } = Utils.GetGUID().ToString();
            /// <summary>
            /// 用户ID。自定义字段
            /// </summary>
            public string userid { get; set; }
            /// <summary>
            /// 扩展字段。自定义字段
            /// </summary>
            public string extend { get; set; }
            /// <summary>
            /// 自定义对象
            /// </summary>
            public object data { get; set; }
            public string token { get; set; }
        }

    JWTHelper.cs 代码如下:

    using Currency.Redis;
    using JWT;
    using JWT.Algorithms;
    using JWT.Serializers;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Currency.Common
    {
        /// <summary>
        /// JWT操作帮助类
        /// </summary>
        public sealed class JWTHelper
        {
            /// <summary>
            /// 签发Token
            /// </summary>
            /// <param name="playload">载荷</param>
            /// <returns></returns>
            public static string GetToken(JWTPlayloadInfo playload)
            {
                
                string token = String.Empty;
                IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
                IJsonSerializer serializer = new JsonNetSerializer();
                IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
                IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
                //设置过期时间
                DateTime time = DateTime.Now.Add(playload.daySpan);
                if (!string.IsNullOrEmpty(playload.iat))
                {
                    var iat = DateTime.Now;
                    try
                    {
                        iat = DateTime.Parse(playload.iat);
                    }
                    catch (Exception)
                    {
                        iat = DateTime.Now;
                    }
                    time = iat.Add(playload.daySpan);
                }
                playload.exp = Utils.GetTimeStamp(time);
                //获取私钥
                string secret = GetSecret();
                if (!string.IsNullOrEmpty(playload.sub))
                {
                    token = encoder.Encode(playload, secret);
                }
    
    
                return token;
            }
           
    
            /// <summary>
            /// Token校验
            /// </summary>
            /// <param name="token"></param>
            /// <returns></returns>
            public static JWTPlayloadInfo CheckToken(string token)
            {
                try
                {
                    if (string.IsNullOrEmpty(token)) return null;
    
                    IJsonSerializer serializer = new JsonNetSerializer();
                    IDateTimeProvider provider = new UtcDateTimeProvider();
                    IJwtValidator validator = new JwtValidator(serializer, provider);
    
                    IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
                    IJwtDecoder decoder = new JwtDecoder(serializer, validator, urlEncoder);
    
                    //获取私钥
                    string secret = GetSecret();
                    JWTPlayloadInfo playloadInfo = decoder.DecodeToObject<JWTPlayloadInfo>(token, secret, true);
                    if (playloadInfo != null)
                    {
                        if (!string.IsNullOrEmpty(playloadInfo.sub))
                        {
                            var cacheToken = RedisHelper.StringGet($"user:login:{playloadInfo.sub}:{playloadInfo.jti}");
                            return Check(playloadInfo, cacheToken, token) ? playloadInfo : null;
                        }
                    }
                }
                catch (Exception)
                {
                    return null;
                }
                return null;
            }
           private static bool Check(JWTPlayloadInfo info, string cacheToken, string token)
            {
                if (string.IsNullOrEmpty(cacheToken)) return false;
                if (string.IsNullOrEmpty(token)) return false;
                if (!cacheToken.Equals(token)) return false;
    
                //Token过期
                DateTime exp = Utils.GetTime(info.exp);
                if (DateTime.Now > exp)
                {
                    if (!string.IsNullOrEmpty(info.sub))
                    {
                        RedisHelper.KeyDelete($"user:login:{info.sub}:{info.jti}");
                    }
                    return false;
                }
                return true;
            }
            /// <summary>
            /// 获取私钥
            /// </summary>
            /// <returns></returns>
            private static string GetSecret()
            {
                //TODO 从文件中去读真正的私钥
                return "eyJpc3MiOiJCZXJyeS5TZXJ2aWNlIiwic3ViIjoiMTgyODQ1OTQ2MTkiLCJhdWQiOiJndWVzdCIsImlhdCI6IjE1MzEzODE5OTgiLCJleHAiOiIxNTMxMzg5MTk4IiwibmJmIjowLCJqdGkiOiI1YzdmN2ZhM2E4ODVlODExYTEzNTQ4ZDIyNGMwMWQwNSIsInVzZXJpZCI6bnVsbCwiZXh0ZW5kIjpudWxsfQ";
            }
        }
    
    }
    

    其中用到了 RedisHelper,请参考另一篇文章 https://blog.csdn.net/u013608482/article/details/88397789

    展开全文
  •  我们在做有关短信验证码功能的时候,为了防止用户无休止的获取短信验证码,或者是误操作,造成验证码混乱的情况,我们一般在获取验证码... 今天这篇文章,是介绍如何使用CountDowmTimer实现验证码的倒计时功能的。

        转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992

        我们在做有关短信验证码功能的时候,为了防止用户无休止的获取短信验证码,或者是误操作,造成验证码混乱的情况,我们一般在获取验证码功能的Button上面加上倒计时功能,从而限制用户获取验证码的间隔。

        今天这篇文章,是介绍如何使用CountDowmTimer实现验证码的倒计时功能的。

        先看效果图


        CountDownTimer是一个系统提供的一个关于倒计数的类,我们可以设置倒计时的总时间,还有倒计时的间隔,这样每过一段固定时间,我们就可以在回调函数中进行我们的操作。下面是CountDownTimer类的回调方法和构造函数。

    CountDownTimer timer = new CountDownTimer(AllTime,Intevel) {  
            
           @Override  
           public void onTick(long millisUntilFinished) {  
                
           }  
            
           @Override  
           public void onFinish() {  
              
           }  
        };

        new CountDownTimer(AllTime,Intevel)

        第一个参数是总时间,第二个是倒计时间隔。

        onTick()是倒计时到了间隔时间之后的回调函数。

        onFinish()是计时结束之后调用的函数。

        下面,给出我的倒计时帮助类。

    package com.example.countdowntimerdemo;
    
    import android.os.CountDownTimer;
    import android.util.Log;
    import android.widget.Button;
    
    /**
     * 倒计时Button帮助类
     * 
     * @author zhaokaiqiang
     * @see http://blog.csdn.net/zhaokaiqiang1992
     */
    public class CountDownButtonHelper {
    
    	// 倒计时timer
    	private CountDownTimer countDownTimer;
    	// 计时结束的回调接口
    	private OnFinishListener listener;
    
    	private Button button;
    
    	/**
    	 * 
    	 * @param button
    	 *            需要显示倒计时的Button
    	 * @param defaultString
    	 *            默认显示的字符串
    	 * @param max
    	 *            需要进行倒计时的最大值,单位是秒
    	 * @param interval
    	 *            倒计时的间隔,单位是秒
    	 */
    	public CountDownButtonHelper(final Button button,
    			final String defaultString, int max, int interval) {
    
    		this.button = button;
    		// 由于CountDownTimer并不是准确计时,在onTick方法调用的时候,time会有1-10ms左右的误差,这会导致最后一秒不会调用onTick()
    		// 因此,设置间隔的时候,默认减去了10ms,从而减去误差。
    		// 经过以上的微调,最后一秒的显示时间会由于10ms延迟的积累,导致显示时间比1s长max*10ms的时间,其他时间的显示正常,总时间正常
    		countDownTimer = new CountDownTimer(max * 1000, interval * 1000 - 10) {
    
    			@Override
    			public void onTick(long time) {
    				// 第一次调用会有1-10ms的误差,因此需要+15ms,防止第一个数不显示,第二个数显示2s
    				button.setText(defaultString + "(" + ((time + 15) / 1000)
    						+ "秒)");
    				Log.d("CountDownButtonHelper", "time = " + (time) + " text = "
    						+ ((time + 15) / 1000));
    			}
    
    			@Override
    			public void onFinish() {
    				button.setEnabled(true);
    				button.setText(defaultString);
    				if (listener != null) {
    					listener.finish();
    				}
    			}
    		};
    	}
    
    	/**
    	 * 开始倒计时
    	 */
    	public void start() {
    		button.setEnabled(false);
    		countDownTimer.start();
    	}
    
    	/**
    	 * 设置倒计时结束的监听器
    	 * 
    	 * @param listener
    	 */
    	public void setOnFinishListener(OnFinishListener listener) {
    		this.listener = listener;
    	}
    
    	/**
    	 * 计时结束的回调接口
    	 * 
    	 * @author zhaokaiqiang
    	 * 
    	 */
    	public interface OnFinishListener {
    		public void finish();
    	}
    
    }
    
        测试源代码下载地址,请关注我的github

    https://github.com/ZhaoKaiQiang/CountDownTimerDemo

    展开全文
  • laravel 添加帮助类在helper

    千次阅读 2018-07-10 16:39:09
    1.首先需要找到文件所在位置 如文件所在为值在 app/Common/Helpers/function.php2.在...输入命令 composer dump-autoload 加载成功后就行了参考文章:https://blog.csdn.net/qq_25615395/article/details/80228598...
  • C#CookieHelper--C#操作Cookie的帮助类

    千次阅读 2012-11-15 14:23:05
    导读部分 ------------------------------------------------------------------------------------------------------------...C#基类|C#自定义类|C#帮助类--系列导航文章 http://www.cckan.net/thread-655-1-1.html
  • 情感分析类文章集锦

    2013-03-16 19:27:05
    内有目前基于情感分析的N篇论文文章,希望对初学者可以提供帮助
  • 这个就比较简单了,用过sqlserver的人都知道访问数据库的时候一般都会有个SqlHelper的帮助类,这里就依葫芦画瓢写了个SqliteHelper,很简单: using System; using System.Collections.Generic; using System....
  • * 拼音帮助类 */ public class PinyinUtils { /** * 将字符串中的中文转化为拼音,其他字符不变 * 花花大神->huahuadashen * @param inputString * @return */ public static String getPingYin(String...
  • 点进文章的盆友不如先来做一道非常常见的面试题,如果你能做出来,可能你早已掌握并理解了java的加载机制,若结果出乎你的意料,那就很有必要来了解了解java的加载机制了。代码如下嗯哼?其实上面程序并不是关键...
  • 假如你做了一个个人WP博客,里面有几个分类,比如技术,日记,图片,你又不想让这些文章使用同一个模板,那么下面的文章对你有帮助,网上介绍了很多方法,通过小编测试,以下方法较为通用,你完全放心尝试。...
  • 上篇文章《C# 服务端篇之实现RestFul Service开发(简单实用)》讲解到,如果开发一个简单的Restful风格的Service,也提到了简单创建一个Restful Client去如何调用Service的API,本文只要再次详细讲解一个高效便捷易...
  • 入门级别的Active Server Page类文章--希望对大家学习有帮助
  • 关于写不写技术文章 最近看到了关于it人员是不是应该写一些技术文章我的看法是写一些也没什么坏处,自己在学习过程中的问题和收获 写出来不但可以记录自己的学习过程,还可以帮助别人学习有什么不好的呢,有...
  • 四级考试作文模板,按题目类型分的。应该会有点帮助吧……
  • 这个题目有点大,而且我要严格控制字数,不能...事实上,这篇作文是上一篇作文中关于区间查找小节的扩展。1.IP数据包分类根据IP数据包协议头的若干字段,也叫匹配域,将数据包划分到某个类别,这就是IP数据包分类的核心
  • 反欺诈优秀文章汇总

    千次阅读 2019-05-14 10:08:54
    40页PPT详解反欺诈体系与策略规则 https://mp.weixin.qq.com/s/d7jSGOpy6pzy_GKju1LfEQ 干货 | 人工智能如何帮助银行反欺诈? https://mp.weixin.qq.com/s/5uUH2BYDH77TTEcr_6DQEw
  • 写得很不错的asp文章,对新手来说很有帮助,因为我也从中受益匪浅~希望对大家也有帮助吧~~
  • 请你依据以下内容给主编写封信,内容主要包括: 1、说明你是该报的忠实读者 2、说明该报优点:(1)兼顾国内外新闻 (2)介绍名人成功故事 3、提出建议:刊登指导英语学习的文章 注意:1、词数100左右,开头语己为你...
  • 一篇文章彻底读懂Java枚举Enum(案例详解)

    千次阅读 多人点赞 2021-04-30 23:43:20
    博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结,感谢你的阅读和关注,希望我的博客能帮助到更多的人,分享获取新知,大家一起进步!...
  • 二哥,我就是上次说你《教妹学Spring》看不懂的那个小白,没想到你还特意写了一篇入门级的 Java 基础知识,这次真的看懂了,感觉好棒。请原谅我上次的唐突,二哥能够照顾我们这些小白的学习进度,真的...和对象是...
  • 深入理解Java加载器(ClassLoader)

    万次阅读 多人点赞 2017-06-26 09:34:08
    【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) ...关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解
  • 既然对象是以为模板生成的,那么又是以什么为模板生成的?...文章目录 元 工厂 初始元属性 元作用 面向方面和元 小结 新型 新型VS传统 静态方法和方法 特定方法 特定属性 super()方法 小结
  • 万字长文整理,希望对您有所帮助。 同时,该部分知识均为作者查阅资料撰写总结,并且开设成了收费专栏,为小宝赚点奶粉钱,感谢您的抬爱。当然如果您是在读学生或经济拮据,可以私聊我给你每篇文章开白名单,或者...
  • 详解 Java 内部

    万次阅读 多人点赞 2018-09-04 00:17:56
    从种类上说,内部可以分为四类:普通内部、静态内部、匿名内部、局部内部。我们来一个个看: 普通内部 这个是最常见的内部之一了,其定义也很简单,在一个里面作为的一个字段直接定义就可以...
  • java内部

    2013-05-09 22:28:31
    java内部向来难以理解 这篇文章或许有住你帮助裂解
  • 前面一篇文章详细讲解了素描特效、怀旧特效、光照特效、流年特效以及滤镜特效,代码通过...基础性文章,希望对你有所帮助。同时,该部分知识均为杨秀璋查阅资料撰写,转载请署名CSDN+杨秀璋及原地址出处,谢谢!!
  • 轻松学习C#的抽象

    2020-09-03 03:08:17
    轻松学习C#的抽象,对C#的抽象感兴趣的朋友可以参考本篇文章帮助大家更灵活的运用C#的抽象
  • 轻松学习C#的密封

    2020-09-03 03:04:38
    轻松学习C#的密封,对C#的密封感兴趣的朋友可以参考本篇文章帮助大家更灵活的运用C#的密封

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 529,769
精华内容 211,907
关键字:

帮助类的作文