zoukankan      html  css  js  c++  java
  • ASP.NET Cookie概念、CURD操作、原理、实际运用

    会话就WEB开发来说,一个会话就是你通过浏览器与服务器之间的一次通话,只不过这种通话是以用浏览器浏览的方式来实现的.

    就会话的应用来说,一般会话是用来识别用户的,比如你可以使用会话级变量记录当前用户已经输入的用户名密码,这样就不用他每次输入了,还可以用来记录一些其他的与当前这一次通话有关的信息。一旦你关闭了浏览
    器,虽然会话没有结束,但是你重新打开浏览器时,已经不能再次利用上一次的会话了,它会新建一个会话。而服务器会根据预先的设置在超时后自动关闭会话,你也可以手动结束会话。

    一、Cookie的基本概念

    Cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。

    关于Cookie的知识还需要了解以下几点。

    1、Cookie只是一段字符串,并不能执行。

    2、大多数浏览器规定Cookie大小不超过4K,每个站点能保存的Cookie不超过20个,所有站点保存的Cookie总和不超过300个。

    3、除了Cookie外,几乎没有其他的方法在客户端的机器上写入数据(就连Cookie的写入操作也是浏览器进行的)。当然,连Cookie都可以通过浏览器安全配置来禁止。

       微软Internet Explorer 设置方法:工具 > Internet选项 > 隐私 页 调节滑块或者点击“高级”,进行设置.

    4、在使用Cookie时,必须意识到其固有的安全弱点。Cookie毕竟是存放于客户端的。因此不要在Cookie中保存保密信息,如用户名、密码、信用卡号等。在Cookie中不要保存不应该由用户掌握的内容,也不要保存可能被其他窃取Cookie的人控制的内容。

    5、Cookie文件存放地址(IE浏览器查看 工具 > Internet选项 > 常规选项卡-设置-查看文件):

    Cookie文件存放地址

    二、ASP.NET对Cookie的CURD操作

    代码如下:

             //写入Cookie三种方式
                //方式1
                var cookie = new HttpCookie("name", "joye888");
                Response.Cookies.Add(cookie);
                //方式2
                Response.Cookies["name1"].Value = "joye8881";
                Response.Cookies["name1"].Expires = DateTime.MaxValue;
                //方式3
                var acookie = new HttpCookie("name2");
                acookie.Value = "joye8882";
                acookie.Expires = DateTime.MaxValue;
                Response.Cookies.Add(acookie);
    
                //写入多值Cookie
                //方式1:
                //Response.Cookies["userinfo"]["name"].Value = "joye888";
                //Response.Cookies["userinfo"].Expires = DateTime.MaxValue;
    
                //方式2:
                HttpCookie cookie2 = new HttpCookie("userinfo");
                cookie2.Values["name"] = "joye888";
                cookie2.Expires = DateTime.Now.AddDays(1);
                Response.Cookies.Add(cookie2);
    
                //读取Cookie的值之前,应该确保该 Cookie 确实存在。否则,您将得到一个异常
                //读取Cookie
                var httpCookie = Request.Cookies["name1"];
                if (httpCookie != null)
                {
                    var name = httpCookie.Value;
                }
                //多值Cookie的读取
                var httpCookie1 = Request.Cookies["userInfo"];
                if (httpCookie1 != null)
                {
                    var name1 = httpCookie1["name"];
                }
    
                //修改和删除cookie 
                //修改的方法与创建方法相同
                var cookieEdit = new HttpCookie("name", "joye888Edit");
                cookieEdit.Expires = DateTime.Now.AddDays(-1); //将其有效期设置为过去的某个日期。当浏览器检查 Cookie 的有效期时,就会删除这个已过期的 Cookie。
                Response.Cookies.Add(cookieEdit);
    
                //如果有主站及二级域名站且cookie要共享的话则要加入如下设置
                cookie.Domain = ".cnblog.com";
                cookie.Path = "/";
            public static void AddCookie(string key,string value,int expires)
            {
                var acookie = new HttpCookie(key);
                acookie.Value = value;
                acookie.Domain = ".cnblog.com";
                acookie.Path = "/";
                acookie.Expires = DateTime.Now.AddMinutes(expires);
                HttpContext.Current.Response.Cookies.Add(acookie);
            }
    
            public static string GetCookie(string key)
            {
                var httpCookie = HttpContext.Current.Request.Cookies[key];
    
                if (httpCookie != null)
                {
                    return httpCookie.Value;
                }
                return "";
            }

    浏览器查看写入的Cookie,F12:

    三、Cookie运行原理图解

    四、Cookie使用的注意事项

     Cookie虽然是一个简单实用的对象,但是我们也要注意Cookie的工作原理、大小限制以及安全性等,大致可以归纳为以下几点。

    1、存储的物理位置。客户端的Cookies文件夹内。

    2、存储的类型限制。字符串。

    3、状态使用的范围。当前请求上下文的上下文都能访问到Cookie,Cookie对每个用户来说都是独立的。

    4、存储的大小限制。每个Cookie不超过4K数据。每个网站不超过20个Cookie。所有网站的Cookie总和不超过300个。

    5、生命周期。每个Cookie都有自己的过期时间,超过了过期时间后失效。

    6、安全与性能。存储在客户端,安全性差。对于敏感数据建议加密后存储。

    7、优点缺点与注意事项。可以很方便地关联网站和用户,长久保存用户设置。

    五、Cookie的实际运用

    登录记住用户名和密码示例

    页面代码:

    <body>
        <form id="form1" method="post" action="rembPage.aspx">
        <div>
            帐号: <input type="text" name="userName" /><br />
            密码 :<input type="password" name="pass" /><br />
            记住我: <input type="checkbox" value="rem" name="sele1" /><br />
            <input type="submit" value=" 登录 " /> 
        </div>
        </form>
    </body>

    实现代码:

    if (Request.Cookies["userName"] == null && Request.Cookies["passWord"] == null)  //判断是否存在cookie,如果存在表示上次选择了记住我
                {
                    if (Request.Form["userName"] != null && Request.Form["pass"] != null)
                    {
                        String userName = Request.Form["userName"];
                        String userPassWord = Request.Form["pass"];
                        if (userName == "admin" && userPassWord == "123")
                        {
                            if (Request.Form["sele1"] != null)
                            {
                                HttpCookie cookieUserName = new HttpCookie("userName", userName);  //创建帐号的cookie实例
                                HttpCookie cookiePassWord = new HttpCookie("passWord", userPassWord);
                                cookieUserName.Expires = DateTime.Now.AddDays(2);   //设置帐号cookie的过期时间,当前时间算往后推两天
                                cookiePassWord.Expires = new DateTime(2012, 5, 27);   //设置密码cookie的过期时间,过期时间为2012年5月27日
                                Response.Cookies.Add(cookieUserName);  //将创建的cookieUserName文件输入到浏览器端
                                Response.Cookies.Add(cookiePassWord);
                                Response.Redirect("Index.aspx"); //跳转到你想要的页面
                            }
                            else
                            {
                                Response.Redirect("Index.aspx");//即便不记住密码也要跳转
                            }
                        }
    
                    }
                }
                else
                {
                    Response.Redirect("Index.aspx");//如果记住密码,第二次登录将直接进入Index.aspx页面
                }
  • 相关阅读:
    bys_tu_2016
    ciscn_2019_es_1
    jarvisoj_level5
    axb_2019_brop64
    [ZJCTF 2019]EasyHeap
    ciscn_2019_es_7
    Exp1 PC平台逆向破解 相关wp
    picoctf_2018_shellcode
    cmcc_simplerop
    axb_2019_fmt32
  • 原文地址:https://www.cnblogs.com/yinrq/p/5019448.html
Copyright © 2011-2022 走看看