欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » Html » 正文

热门阅读

JavaScript开发技术-cookie的操作

创建时间:2012年05月25日 14:48  阅读次数:(5411)
分享到:

3.通过cookie实现客户端与服务器端的通信


(1)cookie的信息组成
一个cookie通常由以下部分组成(各部分信息以;分割):
cookie_name=cookie_value;expires=expiration_time;path=domain_path;domain=domain_name;

cookie的名称不区分大小写,是cookie的唯一标识。
cookie_value为字符串值。在存储之前使用encodeURIComponent()进行编码。名称和值加起来的字节数不能超过4095字节,即4kb。
出于安全考虑,网站不能访问由其他域创建的cookie。也可以覆盖这个设置以允许另一个网站访问这个cookie。
路径限制了对web服务器上的特定目录的访问。例如,可指定cookie只能从http://www.microsoft.com/cn中访问,这样就不能访问http://www.microsoft.com上的网页了。
失效日期用于指明cookie何时应该被删除。默认情况下,关闭浏览器时,即将cookie删除。必须是GMT格式的日期(可以使用Date对象的toGMTString()方法)。如果设置的失效日期是个过去的日期,则cookie被立刻删除。
安全标志是以个true/false值,用于表示cookie是否只能从安全网站(使用SSL和https协议的网站)中访问。可以将这个值设置为true以提供加强的保护.
例:LoginUserID=sa;expires=Mon, 30 Jan 2012 16:00:00 UTC

(2)cookie的安全限制
每个域最多只能在一台用户的机器上存储20个cookie;
每个cookie的总尺寸不能超过4096字节;
一台用户的机器上的cookie总数不能超过300个。

(3)使用javascript添加或修改cookie
给document.cookie赋值就添加或修改了一个cookie。
例:document.cookie = “LoginUserID=sa”;
Document.cookie=”LastLoginDate=”+encodeURIComponent(“ 2010-01-01 10:00”);
通常创建一个函数用于添加cookie,如:
function setCookie(cookieName, cookieValue, cookieExpires, cookiePath, cookieDomain, cookieSecure) {
    var newCookie = cookieName + "=" + encodeURIComponent(cookieValue);
    if (cookieExpires!=null) {
        newCookie = newCookie + ";expires=" + cookieExpires.toGMTString();
    }
    if (cookiePath != null) {
        newCookie = newCookie + ";path=" + cookiePath;
    }
    if (cookieDomain != null) {
        newCookie = newCookie + ";domain=" + cookieDomain;
    }
    if (cookieSecure != null) {
        newCookie = newCookie + ";secure";
    }
    document.cookie = newCookie;
}

(4)使用javascript获取cookie
function getCookie(cookieName) {
    var cookies = document.cookie;
    if (cookies != null) {
        cookies = decodeURIComponent(cookies); //解码
        var cookieList = cookies.split(";");
        for (var i = 0; i < cookieList.length; i++) {
            if (cookieList[i].toLowerCase().indexOf(cookieName.toLowerCase() + "=") == 0) {
                return cookieList[i];
            }
        }

    }
    return null;
}

(5)使用javascript删除cookie
可以通过设置失效日期为一个过去的日期来删除cookie
function deleteCookie(cookieName) {
    var newCookie = cookieName + "='';expires=" + (new Date(0)).toGMTString();
    document.cookie = newCookie;
}
(6)使用javascript删除所有cookie
function deleteCookies() {
    var cookies = document.cookie;
    var newCookie = "";
    var equalIndex = -1;
    if (cookies != null) {
        cookies = decodeURIComponent(cookies); //解码
        var cookieList = cookies.split(";");
        for (var i = 0; i < cookieList.length; i++) {
            equalIndex = cookieList[i].toLowerCase().indexOf("=");
            if (equalIndex > 0) {
                newCookie = cookieList[i].substring(0, equalIndex) + "='';expires=" + (new Date(0)).toGMTString();
                document.cookie = newCookie;
            }                    
        }                
    }            
}

(7)使用ASP.NET添加或修改cookie
在asp.net中可以使用Response.Cookies.Add(HttpCookie newCookie)或Response.SetCookie(HttpCookie newCookie)来添加或修改cookie
protected void SetCookie(string cookieName, string cookieValue, DateTime cookieExpires, string cookiePath, string cookieDomain, bool cookieSecure)
{
    HttpCookie newCookie = new HttpCookie(cookieName,cookieValue);
    newCookie.Expires = cookieExpires;
    newCookie.Path = cookiePath;
    newCookie.Domain = cookieDomain;
    newCookie.Secure = cookieSecure;
    Response.Cookies.Add(newCookie);
}

(7)使用ASP.NET获取cookie
在asp.net中可以通过读取Request.Cookies获取所有Cookie或指定Cookie。
protected void btnGetAllCookieServer_Click(object sender, EventArgs e)
{
    StringBuilder cookieString = new StringBuilder();
    HttpCookie hc;
    for (int i=0;i < Request.Cookies.Count;i++)
    {
        hc = Request.Cookies[i];
        cookieString.Append("Name=" + hc.Name + ";Value=" + hc.Value + ";Expires=" + hc.Expires.ToString("yyyy-MM-dd hh:mm:ss") + ";Path=" + hc.Path + ";Domain=" + hc.Domain + ";Secure=" + hc.Secure.ToString()+";");

    }
    if (cookieString.Length > 0)
    {
        ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "GetCookies1","alert('" + cookieString.ToString() + "');",true);
    }
}

(8)在ASP.NET删除cookie
注意:不要直接循环Request.Cookies,因为那样需要N*2次循环
int cookieCount = Request.Cookies.Count;
for (int i = 0; i < cookieCount; i++)
{
    HttpCookie hc = new HttpCookie(Request.Cookies[i].Name);
    hc.Expires = DateTime.Now.AddDays(-1);
    Response.SetCookie(hc);
}

(9)客户端与服务器端cookie的通信
通常是在服务器端检查是否需要写cookie(如记住我),如果需要则添加cookie,在客户端onload事件中获取cookie并给html元素赋值。ckRh埦?_剉&
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 63+62=? 的结果(结果是:125)
结  果: