zoukankan      html  css  js  c++  java
  • 前端的存储技术cookie、sessionStorage、localStorage

    HTTP无状态协议是指协议对于事务处理没有记忆能力。
    会话跟踪
    协议的状态是指下一次传输可以“记住”这次传输信息的能力,无状态是指同一个会话(注意什么叫同一个会话)
    的连续两个请求互相不了解,当浏览器发送请求给服务器的时候,服务器响应,但是同一个浏览器再发送请求给
    服务器的时候,他会响应,但是他不知道你就是刚才那个浏览器,每一次请求和响应都是相对独立的。

    Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化
    登录手续,这些都是Cookies的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面
    中选择不同的商品,这些信息都会写入Cookies,以便在最后付款时提取信息。

    Javascript使用cookie
    假设有这样一种情况,在某个用例流程中,由A页面跳至B页面,若在A页面中采用JS用变量temp保存了某一变量的值,在B页面的时候,
    同样需要使用JS来引用temp的变量值,对于JS中的全局变量或者静态变量的生命周期是有限的,当发生页面跳转或者页面关闭的时候,
    这些变量的值会重新载入,即没有达到保存的效果。解决这个问题的最好的方案是采用cookie来保存该变量的值,那么如何来设置和读
    取cookie呢?
    首先需要稍微了解一下cookie的结构,简单地说:cookie是以键值对的形式保存的,即key=value的格式。各个cookie之间一般是以“;”分隔


    在H5中webStorage其实就是在web上存储数据,分为两种:
    sessionStorage 在浏览器关闭时存储的数据将消失---临时存储
    localStorage 可以一直存在 --- 永久存储

    设置
    session storage:
    sessionStorage.setItem("smessage",dataDom.value);

    获取
    sessionStorage.getItem("smessage")

    removeItem删除key
    用途:删除指定key本地存储的值
    用法:.removeItem(key)
    代码示例:
    sessionStorage.removeItem("key"); localStorage.removeItem("site");


    clear清除所有的key/value
    用途:清除所有的key/value
    用法:.clear()
    代码示例:
    sessionStorage.clear(); localStorage.clear();

    1、cookie一般不大于4095kb;设置过多访问很慢;
    2、客户端与服务器都能访问数据
    3、有有限期

    local storage:只有本地浏览器能访问,每个域大小5M
    没有过期时间;即存即取;


    cookie是以键值对的形式保存的,即key=value的格式。各个cookie之间一般是以“;”分隔。
    document.cookie="name="+username;
    var username=document.cookie.split(";")[0].split("=")[1];


    //JS操作cookies方法!
    //写cookies
    function setCookie(name,value)
    {
    var Days = 30;
    var exp = new Date();
    exp.setTime(exp.getTime() + Days*24*60*60*1000);
    document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
    }

    //获取cookie
    function getCookie(name)
    {
    var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
    if(arr=document.cookie.match(reg))
    return unescape(arr[2]);
    else
    return null;
    }
    //删除cookie
    function delCookie(name)
    {
    var exp = new Date();
    exp.setTime(exp.getTime() - 1);
    var cval=getCookie(name);
    if(cval!=null)
    document.cookie= name + "="+cval+";expires="+exp.toGMTString();
    }
    //使用示例
    setCookie("name","hayden");
    alert(getCookie("name"));
    //如果需要设定自定义过期时间
    //那么把上面的setCookie 函数换成下面两个函数就ok;
    //程序代码
    function setCookie(name,value,time)
    {
    var strsec = getsec(time);
    var exp = new Date();
    exp.setTime(exp.getTime() + strsec*1);
    document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
    }
    function getsec(str)
    {
    alert(str);
    var str1=str.substring(1,str.length)*1;
    var str2=str.substring(0,1);
    if (str2=="s")
    {
    return str1*1000;
    }
    else if (str2=="h")
    {
    return str1*60*60*1000;
    }
    else if (str2=="d")
    {
    return str1*24*60*60*1000;
    }
    }
    //这是有设定过期时间的使用示例:
    //s20是代表20秒
    //h是指小时,如12小时则是:h12
    //d是天数,30天则:d30
    setCookie("name","hayden","s20");


    封装函数
    //获取
    function getCookie(c_name){
    if (document.cookie.length>0) {
    var c_start=document.cookie.indexOf(c_name + "=")
    //console.log(c_start);
    if(c_start!=-1){
    c_start=c_start + c_name.length+1
    }else{
    return;
    }
    //username
    // console.log(c_start);
    c_end=document.cookie.indexOf(";",c_start)
    console.log(c_end);
    if (c_end==-1) {
    c_end=document.cookie.length;
    }
    return document.cookie.substring(c_start,c_end);
    }else{
    return ""
    }

    }
    //设置
    function setCookie(c_name,value,expiredays){
    var exdate=new Date()
    exdate.setDate(exdate.getDate()+expiredays);
    document.cookie=c_name+ "=" +value+";"+((expiredays==null) ? "" : ";expires="+exdate.toGMTString())
    }
    //检查
    function checkCookie(){
    var username=getCookie('username')
    console.log(username);
    if (username!=null && username!=""){
    alert('Welcome again '+username+'!');
    //setCookie("username",username,-1);
    }else{
    username=prompt('Please enter your name:',"")
    if (username!=null && username!=""){
    setCookie('username',username,365)
    }
    }
    }
    onload=checkCookie();

    作者: 一一17

    出处:http://www.cnblogs.com/yiyi17/

    关于作者:专注HTML5和前端!

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(bllbl_2013@aliyun.com)咨询.

    你要觉得这篇文章比较好,记得点推荐!
  • 相关阅读:
    混杂模式
    消息队列学习
    item21
    消息队列改写
    socket select模型
    EffectiveC++ Item11
    How to read a PCap file from Wireshark with C++
    winsock select学习
    线程安全与可重入函数
    process explorer 查看句柄或者加载的dll
  • 原文地址:https://www.cnblogs.com/yiyi17/p/7083573.html
Copyright © 2011-2022 走看看