zoukankan      html  css  js  c++  java
  • 分享一下cookies操作(增、删、改、查)小经验

    前段时间在做一个 SSO(Single Sign On),用cookies去存Token

     

    网站保存用户信息这类都用的cookies

     

    以前觉得cookies操作无非就那么几种,但是“杯具事件”还是很多的

     

    下面分享一下对cookies的简单操作

     

    -----------------------------------------------------操作-----------------------------------------------------------

    1.添加cookies(用cookies方式去做sso,用户信息保存,修改都会依赖cookies)

      #region##添加cookeis
    ///<summary>
    /// 添加cookeis
    ///</summary>
    public void AddCookies()
    {

    HttpCookie cookies = new HttpCookie("Porschev");
    cookies["name"] = "Zhong Wei";
    cookies["sex"] = "1";
    cookies.Expires = DateTime.Now.AddMinutes(20);
    Response.Cookies.Add(cookies);

    }
    #endregion

    添加cookies一般不会有人出错的。。。记得添加Expires就行

    2.修改cookies( 在程序中难免会操作,对用户信息的修改,更新数据库后,也会修改cookies,为了修改后的显示)

    方法一:

        #region##修改cookies
    ///<summary>
    /// 修改cookies
    ///</summary>
    public void ModCookies()
    {

    HttpCookie cookies = Request.Cookies["Porschev"];
    cookies["name"] = "wilson Z";

    }
    #endregion

    新建个测式页。。再取cookies中的name,结果:wilson Z;

    这是这次项目中遇到的“杯具”事件之一,当这样修改cookies时,在更新方法中再取这个名为Porschev的cookies,

    name的值还为Zhong Wei而非wilson Z,页面显示也不对(己排除页面缓存原因,更新也确实没有成功)

     

    修改方法一:

     #region##修改cookies
    ///<summary>
    /// 修改cookies
    ///</summary>
    public void ModCookies()
    {

    HttpCookie cookies = Request.Cookies["Porschev"];
    cookies["name"] = "wilson Z";
    //加上下面一句
    Response.Cookies["Porschev"].Expires = DateTime.Now.AddMinutes(-1);

    }
    #endregion

    再次测式,结果正确,取出name的值为:wilson Z,页面显示也正确

    自己理解:得让以前存入过期时间为20min的cookies失效

    3.得到cookies (这个最简单,为求方法完整,还是写上吧)

     #region##得到cookies
    ///<summary>
    /// 得到cookies
    ///</summary>
    public void GetCookies()
    {

    HttpCookie cookies = Request.Cookies["Porschev"];
    string name = cookies["name"]; //通过key取出对应value,多key同理取

    }
    #endregion

    4.删除cookies (删除cookies网上有很多方法,但是删除不是都能管用)

    方法一:(最常用的一个删除cookies方法)

       #region##删除cookies
    ///<summary>
    /// 删除cookies
    ///</summary>
    public void DelCookeis()
    {

    if (Request.Cookies["Porschev"] != null)
    {
    HttpCookie cookies = new HttpCookie("Porschev");
    cookies.Expires = DateTime.Now.AddDays(-1);
    Response.Cookies.Add(cookies);
    }

    }
    #endregion

    在项目中测式,删除部分cookies失败,很无语,于是换一种方法

     #region##删除cookies
    ///<summary>
    /// 删除cookies
    ///</summary>
    public void DelCookeis()
    {

    foreach (string cookiename in Request.Cookies.AllKeys)
    {
    HttpCookie cookies = Request.Cookies[cookiename];
    if (cookies != null)
    {
    cookies.Expires = DateTime.Today.AddDays(-1);
    Response.Cookies.Add(cookies);
    Request.Cookies.Remove(cookiename);
    }
    }

    }
    #endregion

    测式:删除成功

    自己理解:方法一只能删除提当前Response中的cookies,不对完成删除掉客端的cookies,用遍历cookies的方式可以

    方法一定对,己经过项目实际验证,观点不一定正确,如理解有误,请各位指正!!



     



     

     

  • 相关阅读:
    hdu 1426 Sudoku Killer
    hdu 1426 Sudoku Killer
    hdu 1372 Knight Moves
    hdu 1372 Knight Moves
    在 MySQL 中查找含有目标字段的表
    又一次编译无效数据库组件
    POJ 3468 A Simple Problem with Integers(线段树功能:区间加减区间求和)
    CodeForces 42C Safe cracking 规律题
    博客搬家啦!!!!!!!!!!!!!!!!!!!!!!!!
    DML语句报错是因为控制文件无法扩大还是另有原因?
  • 原文地址:https://www.cnblogs.com/zhongweiv/p/Cookies.html
Copyright © 2011-2022 走看看