zoukankan      html  css  js  c++  java
  • ASP.NET中Cookie的使用

    学习web开发,使用Cookie是不可避免的,在这就浅 显的总结一下,供新手参阅。个人感觉Cookie的使用和ASP.NET中的Session非常像,只不过Cookie是保存在客户端,而 Session是在服务器端,两者都以记录信息为目的,作为访问网站的凭据。本文仅仅是实践操作,不涉及理论知识。

    实际操作之前简单的讲一下Cookie吧!

          Cookie其实就是一些保存在客户端的小文件,为下次访问网站时保存一些信息,比如:是否登录。Cookie的最大优点就是使用简单,传递、管理、维护 都由浏览器完成;缺点是不安全、大小有限制、受浏览器安全性设置限制。刚刚提到Cookie实际上是一些小文件,这些文件肯定是用来存储信息的,那么这些 小文件在哪里呢?这要分情况而言,如果服务器建立的是非持久性Cookie,那么这些文件保存在浏览器的内存中,一旦完全关闭浏览器,Cookie便失效 了;如果服务器建立的是持久性Cookie,那么这些文件就被存放在:C:你的用户名DefaultAppDataRoaming MicrosoftWindowsCookies,直接把正确的路径复制到资源管理器地址栏回车访问即可,不要手动寻找,那样是找不到的(即使显示 了隐藏文件,也找不到Cookies文件夹),这些Cookie文件以文本文档的形式存储在这里,所以安全性就可想而知了。在程序中,如果我们设置Cookie的有效时间,则此Cookie就是持久性Cookie,如果不设置,默认的就是非持久性Cookie。

          需要注意的是:当我们访问一个页面时,如果有对应的Cookie,浏览器会自动传递给服务器端,服务器端返回到客户端的Cookie也由浏览器处理,完全不用我们操心;Cookie是可以覆盖的,如果重复写入同名的Cookie,那么将会覆盖之前的Cookie。

          以下的代码展示了:“服务器端如何读取客户端的Cookie”、“服务器端向客户端写入非持久性Cookie”、“服务器端向客户端写入持久性Cookie”、“持久性Cookie和非持久性Cookie的区别”、“强制让有效的持久化Cookie失效”。有了上边的讲解,再加上代码中的详细注释,相信读者一看就会。直接复制以下代码到vs,可正常运行。

    Web前台HTML代码:

    <body>
        <form id="frmUp" runat="server" method="post"> 
            <div>
                存入读取Cookies:<asp:TextBox ID="txtUserName" runat="server"></asp:TextBox>
                <asp:Button ID="btnSaveTemp" runat="server" Text="写入非持久化Cookies" 
                    onclick="btnSaveTemp_Click" />
                <asp:Button ID="btnSaveKeep" runat="server" Text="写入持久化Cookies" 
                    onclick="btnSaveKeep_Click" />
                <asp:Button ID="btnChangeCookie" runat="server" Text="强制持久化Cookies过期" 
                    onclick="btnChangeCookie_Click" />
                <asp:Button ID="btnRead" runat="server" Text="读取" onclick="btnRead_Click" />
            </div>
        </form>
    </body>

    Web后台C#代码:

    //页面加载处理
        protected void Page_Load(object sender, EventArgs e)
        {
            //加载时判断是否存在Cookies,存在则读取
            HttpCookie login = Request.Cookies["Login"]; //获取客户端返回的Cookies中名称为Login的Cookie对象
            if(login != null)
            {
                txtUserName.Text = login["userName"]; //读取Login中属性值
            }
            else
            {
                txtUserName.Text = "Cookies无效";
            }
        }
    
        //服务器端向客户端写入非持久化Cookie
        protected void btnSaveTemp_Click(object sender, EventArgs e)
        {
            HttpCookie tempCookie = new HttpCookie("Login"); //创建一个HttpCookie实例,Cookies名称为Login,实例只是一个容器,真正使用的是Cookie名称
            tempCookie["userName"] = "www.kpdown.com"; //向Login中添加一个userName属性,并赋值
            Response.Cookies.Add(tempCookie); //把Cookies对象返回给客户端
        }
    
        //服务器端向客户端写入持久化Cookie
        protected void btnSaveKeep_Click(object sender, EventArgs e)
        {
            HttpCookie keepCookie = new HttpCookie("Login"); //创建一个HttpCookie实例,Cookies名称为Login,实例只是一个容器,真正使用的是Cookie名称
            keepCookie["userName"] = "www.kpdown.com"; //向Login中添加一个userName属性,并赋值
            keepCookie.Expires = DateTime.Now.AddDays(2); //设定Cookies的有效期为两天
            Response.Cookies.Add(keepCookie); //把Cookies对象返回给客户端
        }
    
        //强制让有效的持久化Cookie失效
        protected void btnChangeCookie_Click(object sender, EventArgs e)
        {
            HttpCookie changeCookie = new HttpCookie("Login"); //使名称为Login的Cookies失效,就把HttpCookie对象的Cookie名称写成Login,相当于用新Login覆盖了旧的Login,Cookie可以覆盖
            changeCookie["userName"] = "www.kpdown.com"; //依然设置属性值,无法读取,证明Cookie已经失效
            changeCookie.Expires = DateTime.Now.AddDays(-1); //设定Cookies的有效期为无效时间即可让该Cookie失效
            Response.Cookies.Add(changeCookie);
        }
    
        //服务器端读取客户端的Cookie
        protected void btnRead_Click(object sender, EventArgs e)
        {
            HttpCookie login = Request.Cookies["Login"]; //获取客户端返回的Cookies中名称为Login的Cookie对象
            if (login != null)
            {
                txtUserName.Text = login["userName"]; //读取Login中属性值
            }
            else
            {
                txtUserName.Text = "Cookies无效";
            }
        }
  • 相关阅读:
    [ Algorithm ] N次方算法 N Square 动态规划解决
    [ Algorithm ] LCS 算法 动态规划解决
    sql server全文索引使用中的小坑
    关于join时显示no join predicate的那点事
    使用scvmm 2012的动态优化管理群集资源
    附加数据库后无法创建发布,error 2812 解决
    浅谈Virtual Machine Manager(SCVMM 2012) cluster 过载状态检测算法
    windows 2012 r2下安装sharepoint 2013错误解决
    sql server 2012 数据引擎任务调度算法解析(下)
    sql server 2012 数据引擎任务调度算法解析(上)
  • 原文地址:https://www.cnblogs.com/longshiyVip/p/5003673.html
Copyright © 2011-2022 走看看