• 关于cookie


    Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,对于JSP而言也可以直接写入jsessionid,这样服务器 可以知道该用户是否是合法用户以及是否需要重新登录等,服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态

    在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话,二者不能混淆。例如,用户A在超市购买的任何商品都应该放在A的购物车内,不论是用户A什么时间购买的,这都是属于同一个会话的,不能放入用户B或用户C的购物车内,这不属于同一个会话。
    而Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。即用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的会话了。要跟踪该会话,必须引入一种机制。
    Cookie就是这样的一种机制。它可以弥补HTTP协议无状态的不足。在Session出现之前,基本上所有的网站都采用Cookie来跟踪会话。

    Cookie的有效期

    Cookie的maxAge决定着Cookie的有效期,单位为秒(Second)。Cookie中通过getMaxAge()方法与setMaxAge(int maxAge)方法来读写maxAge属性。
    如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中。无论客户关闭了浏览器还是电脑,只要还在maxAge秒之前,登录网站时该Cookie仍然有效。下面代码中的Cookie信息将永远有效。
    Cookie cookie = new Cookie("username","helloweenvsfei");   // 新建Cookie
    cookie.setMaxAge(Integer.MAX_VALUE);           // 设置生命周期为MAX_VALUE
    response.addCookie(cookie);                    // 输出到客户端
    如果maxAge为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。maxAge为负数的Cookie,为临时性Cookie,不会被持久化,不会被写到Cookie文件中。Cookie信息保存在浏览器内存中,因此关闭浏览器该Cookie就消失了。Cookie默认的maxAge值为–1。
    如果maxAge为0,则表示删除该Cookie。Cookie机制没有提供删除Cookie的方法,因此通过设置该Cookie即时失效实现删除Cookie的效果。失效的Cookie会被浏览器从Cookie文件或者内存中删除,
    例如:
    Cookie cookie = new Cookie("username","helloweenvsfei");   // 新建Cookie
    cookie.setMaxAge(0);                          // 设置生命周期为0,不能为负数
    response.addCookie(cookie);                    // 必须执行这一句
    response对象提供的Cookie操作方法只有一个添加操作add(Cookie cookie)。
    要想修改Cookie只能使用一个同名的Cookie来覆盖原来的Cookie,达到修改的目的。删除时只需要把maxAge修改为0即可。
    注意:从客户端读取Cookie时,包括maxAge在内的其他属性都是不可读的,也不会被提交。浏览器提交Cookie时只会提交name与value属性。maxAge属性只被浏览器用来判断Cookie是否过期。

    增加Cookie

    增加Cookie的方法很多,下面是两种增加Cookie的方法:

    Response.Cookies("userName").Value = "mike"
    Response.Cookies("userName").Expires = DateTime.Now.AddDays(1
    Dim aCookie As New HttpCookie("lastVisit")
    aCookie.Value = DateTime.Now.ToString
    aCookie.Expires = DateTime.Now.AddDays(1)
    Response.Cookies.Add(aCookie) 

    JS创建存储cookie首先,我们会创建一个可在 cookie 变量中存储访问者姓名的函数:

    functionsetCookie(c_name,value,expiredays)
     
    {
     
    varexdate=newDate()
     
    exdate.setDate(exdate.getDate()+expiredays)
     
    document.cookie=c_name+"="+escape(value)+
     
    ((expiredays==null)?"":";expires="+exdate.toGMTString())
     
    }

    上面这个函数中的参数存有 cookie 的名称、值以及过期天数。
      在上面的函数中,我们首先将天数转换为有效的日期,然后,我们将 cookie 名称、值及其过期日期存入 document.cookie 对象。
      之后,我们要创建另一个函数来检查是否已设置 cookie:

    functiongetCookie(c_name)
     
    {
     
    if(document.cookie.length>0)
     
    {
     
    c_start=document.cookie.indexOf(c_name+"=")
     
    if(c_start!=-1)
     
    {
     
     
    c_start=c_start+c_name.length+1
     
    c_end=document.cookie.indexOf(";",c_start)
     
    if(c_end==-1)
    c_end=document.cookie.length
     
     
    returnunescape(document.cookie.substring(c_start,c_end))
     
    }
     
    }
     
    return""
     
    }

    上面的函数首先会检查 document.cookie 对象中是否存有 cookie。假如 document.cookie 对象存有某些 cookie,那么会继续检查我们指定的 cookie 是否已储存。如果找到了我们要的 cookie,就返回值,否则返回空字符串。
      最后,我们要创建一个函数,这个函数的作用是:如果 cookie 已设置,则显示欢迎词,否则显示提示框来要求用户输入名字。

    functioncheckCookie()
     
    {
     
    username=getCookie('username')
     
    if(username!=null&&username!="")
     
    {alert('Welcomeagain'+username+'!')}
     
    else
     
    {
     
    username=prompt('Pleaseenteryourname:',"")
     
    if(username!=null&&username!="")
     
    {
     
    setCookie('username',username,365)
     
    }
     
    }
     

    整体代码如下:

    <html>
     
    <head>
     
    <scripttype="text/javascript">
     
    functiongetCookie(c_name)
     
    {
     
    if(document.cookie.length>0)
     
    {
     
    c_start=document.cookie.indexOf(c_name+"=")
     
    if(c_start!=-1)
     
    {
     
     
    c_start=c_start+c_name.length+1
     
    c_end=document.cookie.indexOf(";",c_start)
     
    if(c_end==-1)
    c_end=document.cookie.length
     
     
    returnunescape(document.cookie.substring(c_start,c_end))
     
    }
     
    }
     
    return""
     
    }
     
     
    functionsetCookie(c_name,value,expiredays)
     
    {
     
    varexdate=newDate()
     
    exdate.setDate(exdate.getDate()+expiredays)
     
    document.cookie=c_name+"="+escape(value)+
     
    ((expiredays==null)?"":";expires="+exdate.toGMTString())
     
    }
     
     
    functioncheckCookie()
     
    {
     
    username=getCookie('username')
     
    if(username!=null&&username!="")
     
    {alert('Welcomeagain'+username+'!')}
     
    else
     
    {
     
    username=prompt('Pleaseenteryourname:',"")
     
    if(username!=null&&username!="")
     
    {
     
    setCookie('username',username,365)
     
    }
     
    }
     
    }
     
    </script>
     
    </head>
     
     
    <bodyonLoad="checkCookie()">
     
    </body>
     
    </html>

    大概就这么多 大部分都是摘录的 以后有自己的体会会再加上的

  • 相关阅读:
    vpp编写plugin
    vrf 命令
    vxlan + 多个vrf
    dpdk helloworld
    Go函数高级
    Go_defer
    Go递归函数
    Go作用域
    Go函数
    Go字符串
  • 原文地址:https://www.cnblogs.com/bycainiao/p/5662959.html
Copyright © 2020-2023  润新知