zoukankan      html  css  js  c++  java
  • Cookie的使用与实现记住用户名案例

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

    asp.net中Cookie的用法
    HttpCookie cookie = new HttpCookie["Test"];//创建cookie
    cookie.Value = "admin";//设置cookie值
    cookie.Expires = DateTime.Now.AddDays(7);//设置cookie值保存天数
    //将cookie值写到浏览器中,有两种方法
    Response.AppendCookie(cookie);
    context.Response.SetCookie(cookie);

    取出Cookie值也很简单
    HttpCookie cookie = Request.Cookies["Test"];
    string cookieValue;
    cookieValue = cookie.Value;

    在一个Cookie中储存多个信息,那也没有问题
    HttpCookie cookie = new HttpCookie("Test");
    cookie.Values.Add("aaa","111");
    cookie.Values.Add("bbb","222");
    cookie.Values.Add("ccc","333");
    Response.AppendCookie(cookie);

    取出信息也一样简单
    HttpCookie cookie = Request.Cookies["Test"];
    value1 = cookies.Values["aaa"];
    value2 = cookies.Values["bbb"];

    Request.Cookies.Clear()这个方法并不是删除Cookie
    删除 Cookie(即从用户的硬盘中物理移除 Cookie)是修改 Cookie 的一种形式。
    由于 Cookie 在用户的计算机中,因此无法将其直接移除。
    但是,可以让浏览器来为您删除 Cookie。
    该技术是创建一个与要删除的 Cookie 同名的新 Cookie,
    并将该 Cookie 的到期日期设置为早于当前日期的某个日期。
    当浏览器检查 Cookie 的到期日期时,浏览器便会丢弃这个现已过期的 Cookie。
    下面的代码示例演示删除应用程序中所有可用 Cookie 的一种方法:

    CODE:
    HttpCookie aCookie;
    string cookieName;
    int limit = context.Request.Cookies.Count;
    for (int i = 0; i < limit; i++)
    {
      cookieName = context.Request.Cookies[i].Name;
      aCookie = new HttpCookie(cookieName);
      aCookie.Expires = DateTime.Now.AddDays(-1);
      context.Response.Cookies.Add(aCookie);
    }

    cookies过期时间
    Response.Cookies("user_name").Expires=Date+1 ’指定cookie保存时间

    保留COOKIES一个小时
    Response.Cookies("MyCookie").Expires= (now()+1/24)
    Response.Cookies("MyCookie").Expires = DateAdd("h", 1, Now())

    Response.Cookies("CookieName").Expires=DateAdd("m",60,now())
    设置60个月以后过期

    Response.Cookies("User").expires=second()+7
    在expires后面定义的时间可以用时间函数代替
    例如:date()+7就表示在今天的时间上加上7天,而second()+7则是7秒了。

    Response.Cookies("字段名").expires=时间函数+N,例如:
    Response.Cookies("name2").expires=date+1,表示Cookies保存1天,再比如:
    Response.Cookies("name2").expires=Hour+8,表示Cookies保存8小时。
    这种方法我测试过不行(在2003server,iis6.0中),不管second后面有无加(),访问时会出现500错误(还是无法显示网页?忘了)。

    织梦尤文:这里的时间累加建议还是使用DateAdd函数,比如我们要累加一小时,则使用:
    Response.Cookies("baidooglecom").expires = DateAdd("h", 1, Now())

    30分钟:
    Response.Cookies("CookieName").Expires=DateAdd("n",30,now())
    dateadd("S",30,now()) 得到秒

    Expires 指定 cookie 的过期日期。为了在会话结束后将 cookie 存储在客户端磁盘上,或在许多时候,我们希望能更长时间地在访问者的计算机上保存cookie。必须设置该日期。
    若此项属性的设置未超过当前日期,则在任务结束后 cookie 将到期。
    cookie的使用到期时间为“2010年1月1日”: Response.Cookies("CookieName").Expires=#January 01, 2010#
    cookie的过期时间为“cookie的创建时间+365天”:Response.Cookies("CookieName").Expires=Date+365 推荐的
    但最好不要随便写 Response.Cookies("CookieName").Expires=Date,这样页面之间的调用时值会为空。

    实现记住用户名案例:

    html文件:

    <form action="Login.ashx" method="post">
        用户名:<input type="text" name="name" value="@name" />
        密码:<input type="password" name="password" value="" />
        <input type="submit" name="btnOK" value="提交" />
    </form>

    ashx文件:

    context.Response.ContentType = "text/html";
    string html = CommonHelper.ReadHtml("~/Login.html");
    string btnLogin = context.Request["btnOK"];
    if (string.IsNullOrEmpty(btnLogin))//判断按钮是否点击了
    {
        //如果没有点击按钮,尝试获取浏览器的cookie值
        HttpCookie cookLastName = context.Request.Cookies["cookLastName"];
        if (cookLastName != null)
        {
            //如果浏览器有cookie值,就将cookie值替换成html中的用户名
            html = html.Replace("@name", cookLastName.Value);
        }
        else
        {
            html = html.Replace("@name", "");//否则替换成空
        }
        context.Response.Write(html);//输出html页面
    }
    else
    {
        //创建cookie
        HttpCookie cookLastName = new HttpCookie("cookLastName");
        string name = context.Request["name"];
        //设置cookie值
        cookLastName.Value = name;
        //设置cookie值保存天数
        cookLastName.Expires = DateTime.Now.AddDays(7);
        //将cookie值写到浏览器中
        context.Response.SetCookie(cookLastName);
        context.Response.Redirect("Test1.ashx");
    
    }
  • 相关阅读:
    qt5.4.0在windows,32位下的编译, vs2010平台
    three.js
    关于齐次坐标的理解
    osg,vtk,ogre的区别
    BCS 字段显示格式化
    360安全卫士造成Sharepoint文档库”使用资源管理器打开“异常
    Event 8306 5021 5059 5057发布安全令牌时异常
    table新增一行并循环获取table内值
    封装HTML成APP
    footer页面最底端展示
  • 原文地址:https://www.cnblogs.com/genesis/p/4677679.html
Copyright © 2011-2022 走看看