戏说Cookies的作用域

原创 时间:2009-09-12 阅读: 随风缘
戏说Cookies的作用域
背景:
之前做站 Cookies那部分都用得很单纯,就是:
1、指定作用域(下简称Domain):约束子域是否可以共享主域的Cookies;
2、指定作用路径(下简称Path):约束虚拟目录是否能共享Cookies。
这样的做法在www.jumbotcms.cn和jumbotcms.cn之间比较和谐的“过了一段日子”。
然而前阵子购买了新的域名:www.jumbotcms.net,我把它同时指向了原来的网站,这个时候问题出现了:


写了半天,尝试一下www.jumbotcms.cn和www.jumbotcms.net,OK了 互相Cookies不干扰,而且还支持子域共享。
aspx页面是如下写的(省去了如何读配置文件,假设已经赋值给你变量strDomain和strPath)

1:写入Cookies

    string _adminid =...数据库读出的管理员id
    string _adminname =...数据库读出的管理员名称
    int iExpires = 7;有效期1个星期
    //设置Cookies
    System.Collections.Specialized.NameValueCollection myCol = new System.Collections.Specialized.NameValueCollection();
    myCol.Add("id", _adminid);
    myCol.Add("name", _adminname);
    Jumbot.Common.Cookie.SetObj("jcms_admin", iExpires, myCol, strDomain, strPath);


2:读取Cookies


    string AdminId = string.Empty;
    string AdminName = string.Empty;
    if (Jumbot.Common.Cookie.GetValue("jcms_admin") != null)
    {
        AdminId = Jumbot.Common.Cookie.GetValue("jcms_admin", "id");//读出id
        AdminName = Jumbot.Common.Cookie.GetValue("jcms_admin", "name");//读出name
    }
    这样可以根据AdminId来判断有没有登录

    备注:读Cookies的时候不需要制定作用域和路径(其实也没办法指定,要不然还能如此简单就跨域读Cookies吗,哈哈??)

3:删除Cookies


    if (Jumbot.Common.Cookie.GetValue("jcms_admin") != null)
    {
        Jumbot.Common.Cookie.Del("jcms_admin", strDomain, strPath);
    }

 

 

最后再说明一下,为了更安全,可以将Cookies加密解密处理(推荐DES算法,因为它是带密钥的不对称算法),这里不是我要阐述的重点。

[责任编辑:jumbot]

[发表评论] [收藏本页]