C# Cookies操作类封装代码

在jhonse哥的念咒下,终于还是先上一段自己比较常用的代码。。。。。

以下是在网站制作过程中,会员模块用得较多的Cookies操作类代码,参数都有对应注释说明。

方法都以static修饰符,可直接通过Cookies直接调用。希望对大家有所帮助。

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.Specialized;
using System.Web;

namespace SY.Common
{
    /// <summary>
    /// Cookie操作类
    /// </summary>
    public static class Cookies
    {
        /// <summary>
        /// 创建COOKIE对象并赋Value值,修改COOKIE的Value值也用此方法,因为对COOKIE修改必须重新设Expires
        /// </summary>
        /// <param name="strCookieName">COOKIE对象名</param>
        /// <param name="strValue">COOKIE对象Value值</param>
        public static void SetObj(string strCookieName, string strValue)
        {
            SetObj(strCookieName, 1, strValue);
        }
        /// <summary>
        /// 创建COOKIE对象并赋Value值,修改COOKIE的Value值也用此方法,因为对COOKIE修改必须重新设Expires
        /// </summary>
        /// <param name="strCookieName">COOKIE对象名</param>
        /// <param name="iExpires">COOKIE对象有效时间(秒数),1表示永久有效,0和负数都表示不设有效时间,大于等于2表示具体有效秒数,31536000秒=1年=(60*60*24*365),</param>
        /// <param name="strValue">COOKIE对象Value值</param>
        public static void SetObj(string strCookieName, int iExpires, string strValue)
        {
            HttpCookie objCookie = new HttpCookie(strCookieName.Trim());
            objCookie.Value = HttpContext.Current.Server.UrlEncode(strValue.Trim());
            if (iExpires > 0)
            {
                if (iExpires == 1)
                {
                    objCookie.Expires = DateTime.MaxValue;
                }
                else
                {
                    objCookie.Expires = DateTime.Now.AddSeconds(iExpires);
                }
            }
            HttpContext.Current.Response.Cookies.Add(objCookie);
        }
        /// <summary>
        /// 创建COOKIE对象并赋多个KEY键值
        /// 设键/值如下:
        /// NameValueCollection myCol = new NameValueCollection();
        /// myCol.Add("red", "rojo");
        /// myCol.Add("green", "verde");
        /// myCol.Add("blue", "azul");
        /// myCol.Add("red", "rouge");   结果“red:rojo,rouge;green:verde;blue:azul”
        /// </summary>
        /// <param name="strCookieName">COOKIE对象名</param>
        /// <param name="iExpires">COOKIE对象有效时间(秒数),1表示永久有效,0和负数都表示不设有效时间,大于等于2表示具体有效秒数,31536000秒=1年=(60*60*24*365),</param>
        /// <param name="KeyValue">键/值对集合</param>
        public static void SetObj(string strCookieName, int iExpires, NameValueCollection KeyValue)
        {
            HttpCookie objCookie = new HttpCookie(strCookieName.Trim());
            foreach (String key in KeyValue.AllKeys)
            {
                objCookie[key] = HttpUtility.UrlEncode(KeyValue[key].Trim());
            }
            if (iExpires > 0)
            {
                if (iExpires == 1)
                {
                    objCookie.Expires = DateTime.MaxValue;
                }
                else
                {
                    objCookie.Expires = DateTime.Now.AddSeconds(iExpires);
                }
            }
            HttpContext.Current.Response.Cookies.Add(objCookie);
        }
        /// <summary>
        /// 创建COOKIE对象并赋Value值,修改COOKIE的Value值也用此方法,因为对COOKIE修改必须重新设Expires
        /// </summary>
        /// <param name="strCookieName">COOKIE对象名</param>
        /// <param name="iExpires">COOKIE对象有效时间(秒数),1表示永久有效,0和负数都表示不设有效时间,大于等于2表示具体有效秒数,31536000秒=1年=(60*60*24*365),</param>
        /// <param name="strDomain">作用域</param>
        /// <param name="strValue">COOKIE对象Value值</param>
        public static void SetObj(string strCookieName, int iExpires, string strValue, string strDomain)
        {
            HttpCookie objCookie = new HttpCookie(strCookieName.Trim());
            objCookie.Value = HttpUtility.UrlEncode(strValue.Trim());
            objCookie.Domain = strDomain.Trim();
            if (iExpires > 0)
            {
                if (iExpires == 1)
                {
                    objCookie.Expires = DateTime.MaxValue;
                }
                else
                {
                    objCookie.Expires = DateTime.Now.AddSeconds(iExpires);
                }
            }
            HttpContext.Current.Response.Cookies.Add(objCookie);
        }
        /// <summary>
        /// 创建COOKIE对象并赋多个KEY键值
        /// 设键/值如下:
        /// NameValueCollection myCol = new NameValueCollection();
        /// myCol.Add("red", "rojo");
        /// myCol.Add("green", "verde");
        /// myCol.Add("blue", "azul");
        /// myCol.Add("red", "rouge");   结果“red:rojo,rouge;green:verde;blue:azul”
        /// </summary>
        /// <param name="strCookieName">COOKIE对象名</param>
        /// <param name="iExpires">COOKIE对象有效时间(秒数),1表示永久有效,0和负数都表示不设有效时间,大于等于2表示具体有效秒数,31536000秒=1年=(60*60*24*365),</param>
        /// <param name="strDomain">作用域</param>
        /// <param name="KeyValue">键/值对集合</param>
        public static void SetObj(string strCookieName, int iExpires, NameValueCollection KeyValue, string strDomain)
        {
            HttpCookie objCookie = new HttpCookie(strCookieName.Trim());
            foreach (String key in KeyValue.AllKeys)
            {
                objCookie[key] = HttpUtility.UrlEncode(KeyValue[key].Trim());
            }
            objCookie.Domain = strDomain.Trim();
            if (iExpires > 0)
            {
                if (iExpires == 1)
                {
                    objCookie.Expires = DateTime.MaxValue;
                }
                else
                {
                    objCookie.Expires = DateTime.Now.AddSeconds(iExpires);
                }
            }
            HttpContext.Current.Response.Cookies.Add(objCookie);
        }
        /// <summary>
        /// 读取Cookie某个对象的Value值,返回Value值,如果对象本就不存在,则返回字符串"CookieNonexistence"
        /// </summary>
        /// <param name="strCookieName">Cookie对象名称</param>
        /// <returns>Value值,如果对象本就不存在,则返回字符串"CookieNonexistence"</returns>
        public static string GetValue(string strCookieName)
        {
            if (HttpContext.Current.Request.Cookies[strCookieName] == null)
            {
                //return "CookieNonexistence";
                return null;
            }
            else
            {
                return HttpUtility.UrlDecode(HttpContext.Current.Request.Cookies[strCookieName].Value).Trim();
            }
        }
        /// <summary>
        /// 读取Cookie某个对象的某个Key键的键值,返回Key键值,如果对象本就不存在,则返回字符串"CookieNonexistence",如果Key键不存在,则返回字符串"KeyNonexistence"
        /// </summary>
        /// <param name="strCookieName">Cookie对象名称</param>
        /// <param name="strKeyName">Key键名</param>
        /// <returns>Key键值,如果对象本就不存在,则返回字符串"CookieNonexistence",如果Key键不存在,则返回字符串"KeyNonexistence"</returns>
        public static string GetValue(string strCookieName, string strKeyName)
        {
            if (HttpContext.Current.Request.Cookies[strCookieName] == null)
            {
                //return "CookieNonexistence";
                return null;
            }
            else
            {
                //string strObjValue = HttpContext.Current.Server.UrlDecode(HttpContext.Current.Request.Cookies[strCookieName].Value);
                string strObjValue = HttpContext.Current.Request.Cookies[strCookieName].Value;
                string strKeyName2 = strKeyName + "=";
                if (strObjValue.IndexOf(strKeyName2) == -1)
                {
                    //return "KeyNonexistence";
                    return null;
                }
                else
                {
                    return HttpUtility.UrlDecode(HttpContext.Current.Request.Cookies[strCookieName][strKeyName]).Trim();
                }
            }
        }
        /// <summary>
        /// 修改某个COOKIE对象某个Key键的键值 或 给某个COOKIE对象添加Key键 都调用本方法,操作成功返回字符串"success",如果对象本就不存在,则返回字符串"CookieNonexistence"。
        /// </summary>
        /// <param name="strCookieName">Cookie对象名称</param>
        /// <param name="strKeyName">Key键名</param>
        /// <param name="KeyValue">Key键值</param>
        /// <param name="iExpires">COOKIE对象有效时间(秒数),1表示永久有效,0和负数都表示不设有效时间,大于等于2表示具体有效秒数,31536000秒=1年=(60*60*24*365)。注意:虽是修改功能,实则重建覆盖,所以时间也要重设,因为没办法获得旧的有效期</param>
        /// <returns>如果对象本就不存在,则返回字符串"CookieNonexistence",如果操作成功返回字符串"success"。</returns>
        public static bool Edit(string strCookieName, string strKeyName, string KeyValue, int iExpires)
        {
            if (HttpContext.Current.Request.Cookies[strCookieName] == null)
            {
                //return "CookieNonexistence";
                return false;
            }
            else
            {
                HttpCookie objCookie = HttpContext.Current.Request.Cookies[strCookieName];
                objCookie[strKeyName] = HttpContext.Current.Server.UrlEncode(KeyValue.Trim());
                if (iExpires > 0)
                {
                    if (iExpires == 1)
                    {
                        objCookie.Expires = DateTime.MaxValue;
                    }
                    else
                    {
                        objCookie.Expires = DateTime.Now.AddSeconds(iExpires);
                    }
                }
                HttpContext.Current.Response.Cookies.Add(objCookie);
                return true;
            }
        }
        /// <summary>
        /// 删除COOKIE对象
        /// </summary>
        /// <param name="strCookieName">Cookie对象名称</param>
        public static void Del(string strCookieName)
        {
            HttpCookie objCookie = new HttpCookie(strCookieName.Trim());
            objCookie.Expires = DateTime.Now.AddYears(-5);
            HttpContext.Current.Response.Cookies.Add(objCookie);
        }
        /// <summary>
        /// 删除某个COOKIE对象某个Key子键,操作成功返回字符串"success",如果对象本就不存在,则返回字符串"CookieNonexistence"
        /// </summary>
        /// <param name="strCookieName">Cookie对象名称</param>
        /// <param name="strKeyName">Key键名</param>
        /// <param name="iExpires">COOKIE对象有效时间(秒数),1表示永久有效,0和负数都表示不设有效时间,大于等于2表示具体有效秒数,31536000秒=1年=(60*60*24*365)。注意:虽是修改功能,实则重建覆盖,所以时间也要重设,因为没办法获得旧的有效期</param>
        /// <returns>如果对象本就不存在,则返回字符串"CookieNonexistence",如果操作成功返回字符串"success"。</returns>
        public static bool Del(string strCookieName, string strKeyName, int iExpires)
        {
            if (HttpContext.Current.Request.Cookies[strCookieName] == null)
            {
                //return "CookieNonexistence";
                return false;
            }
            else
            {
                HttpCookie objCookie = HttpContext.Current.Request.Cookies[strCookieName];
                objCookie.Values.Remove(strKeyName);
                if (iExpires > 0)
                {
                    if (iExpires == 1)
                    {
                        objCookie.Expires = DateTime.MaxValue;
                    }
                    else
                    {
                        objCookie.Expires = DateTime.Now.AddSeconds(iExpires);
                    }
                }
                HttpContext.Current.Response.Cookies.Add(objCookie);
                return true;
            }
        }
    }
}

 

php判断文件夹(目录)是否存在,以及创建文件夹(目录)

上传文件的时候,需要对文件进行分组,也就是说创建文件夹(目录),这就需要用到mkdir函数以及is_dir函数。

代码如下:

function make_dir($dir, $index = true) {
	$res = true;
	if(!is_dir($dir)) {
		$res = mkdir($dir, 0777);
		$index && @touch($dir.'/index.html');
	}
	return $res;
}

 

2014年7月编程语言排行榜:仅发布1月,Swift进Top 20!

TIOBE7月编程语言排行榜发布,前三甲无明显变化,C、Java、Objective-C。

本月最值得关注的是,苹果公司在WWDC 2014上推出新的编程语言Swift,发布至今仅一月有余,Swift竟挤进TIOBE排行榜的Top 20,排名第16位。在如此短暂的1个月里,Swift能取得如此骄人的成绩,实在是可喜可贺。

自Swift推出后,国内外各大科技媒体争相报道,各种开发/学习资源(Swift最酷炫的七大功能、我对Swift的看法、90后大学生9天组织完成近670页的Swift语言文档翻)不断“入侵”我们的眼球。Swift如此受捧,得益于它是苹果公司推出的,因此大家都它充满了好奇心,给予了高度关注。

虽然Swift目前已成功进入Top 20,但这能否说明Swift会一直流行下去呢?不知大家是否记得,谷歌此前发布的Go语言?在笔者看来它是雷声大雨点小,现如今Go逐渐被开发者们遗忘,在榜单上,很难在看到的它的身影,前段时间更是跌出了100名外。当然Swift跟Go不同,苹果公司旨在用Swift取代Objective-C,这是因为Swift不仅能兼容Objective-C,它在各个方面都优于它,如此高效的性能,当然更受开发者青睐了。新版本的iPhone和iPad也是利用Swift编译的,因此,Swift在Top20的位置会维持一段时间,有望进入Top 10,当然这还需要时间的历练。我们拭目以待吧!

编程语言排行榜TOP 20榜单:

53b9f7de4d5bc

 

前10名编程语言长期走势图:

53b9f7f473f17

 

以下是21-50编程语言排名:

53b9f807ce95a

 

53b9f81103008

 

后50名编程语言如下:

  • (Visual) FoxPro, 4th Dimension/4D, Alice, APL, ATLAS, Automator, Awk, Bash, bc, BlitzMax, Bourne shell, CFML, cg, Clojure, CLU, Emacs Lisp, Factor, Forth, Fortress, Groovy, Hack, Icon, Inform, Io, Ioke, J, JScript.NET, Korn shell, LabVIEW, M4, Magic, Max/MSP, Mercury, Modula-3, Moto, NATURAL, NXT-G, OCaml, PILOT, Programming Without Coding Technology, Pure Data, Q, Revolution, S, Smalltalk, SPARK, SPSS, Standard ML, VBScript, X10

 

必须声明,这个榜单本身采集的是英文世界的数据,虽然在反映趋势上有一些参考意义,但与中国的实际情况不完全符合,而且,这张采样本身也有相当大的局限性。

【说明】

TIOBE编程语言社区排行榜是编程语言流行趋势的一个指标,每月更新,这份排行榜排名基于互联网上有经验的程序员、课程和第三方厂商的数量。排名使用著名的搜索引擎(诸如Google、MSN、Yahoo!、Wikipedia、YouTube以及Baidu等)进行计算。请注意这个排行榜只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写的代码数量多少。

这个排行榜可以用来考查你的编程技能是否与时俱进,也可以在开发新系统时作为一个语言选择依据。

Discuz模板中使用cutstr来截取字符串

给Discuz写模板的时候需要对字符串进行截取,可以使用cutstr方法来截取。请看实现代码:

<!--{eval echo cutstr($value['subject'],30,'');}-->

cutstr方法代码如下:

/**
* [discuz] 基于PHP没有安装 mb_substr 等扩展截取字符串,如果截取中文字则按2个字符计算
* @param $string 要截取的字符串
* @param $length 要截取的字符数
* @param $dot 替换截掉部分的结尾字符串
* @return 返回截取后的字符串
*/
function cutstr($string, $length, $dot = '...') {
// 如果字符串小于要截取的长度则直接返回
// 此处使用strlen获取字符串长度有很大的弊病,比如对字符串“新年快乐”要截取4个中文字符,
// 那么必须知道这4个中文字符的字节数,否则返回的字符串可能会是“新年快乐...”
if (strlen($string) <= $length) {
return $string;
}

// 转换原字符串中htmlspecialchars
$pre = chr(1);
$end = chr(1);
$string = str_replace ( array ('&amp;', '&quot;', '&lt;', '&gt;' ), array ($pre . '&' . $end, $pre . '"' . $end, $pre . '<' . $end, $pre . '>' . $end ), $string );

$strcut = ''; // 初始化返回值

// 如果是utf-8编码(这个判断有点不全,有可能是utf8)
if (strtolower ( CHARSET ) == 'utf-8') {
// 初始连续循环指针$n,最后一个字位数$tn,截取的字符数$noc
$n = $tn = $noc = 0;
while ( $n < strlen ( $string ) ) {
$t = ord ( $string [$n] );

if ($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
// 如果是英语半角符号等,$n指针后移1位,$tn最后字是1位
$tn = 1;
$n++;
$noc++;
} elseif (194 <= $t && $t <= 223) {
// 如果是二字节字符$n指针后移2位,$tn最后字是2位
$tn = 2;
$n += 2;
$noc += 2;
} elseif (224 <= $t && $t <= 239) {
// 如果是三字节(可以理解为中字词),$n后移3位,$tn最后字是3位
$tn = 3;
$n += 3;
$noc += 2;
} elseif (240 <= $t && $t <= 247) {
$tn = 4;
$n += 4;
$noc += 2;
} elseif (248 <= $t && $t <= 251) {
$tn = 5;
$n += 5;
$noc += 2;
} elseif ($t == 252 || $t == 253) {
$tn = 6;
$n += 6;
$noc += 2;
} else {
$n++;
}

// 超过了要取的数就跳出连续循环
if ($noc >= $length) {
break;
}
}

// 这个地方是把最后一个字去掉,以备加$dot
if ($noc > $length) {
$n -= $tn;
}

$strcut = substr ( $string, 0, $n );

} else {
// 并非utf-8编码的全角就后移2位
for ($i = 0; $i < $length; $i ++) {
$strcut .= ord ( $string [$i] ) > 127 ? $string [$i] . $string [++ $i] : $string [$i];
}
}

// 再还原最初的htmlspecialchars
$strcut = str_replace( array ($pre . '&' . $end, $pre . '"' . $end, $pre . '<' . $end, $pre . '>' . $end ), array ('&amp;', '&quot;', '&lt;', '&gt;' ), $strcut );

$pos = strrpos ( $strcut, chr ( 1 ) );
if ($pos !== false) {
$strcut = substr ( $strcut, 0, $pos );
}

return $strcut . $dot; // 最后把截取加上$dot输出
}