cookie和localStorage创建欢迎信息

两种表达欢迎信息(当用户首次登录网站时,存储用户输入的名称,在第二次进入网站时,根据存储的信息欢迎用户)的方式。

1. localStorage创建欢迎信息

首先在HTML页面中创建基本的信息:

<h1>Welcome</h1>
<button>Change user</button>

一级标签中的内容是用来存储欢迎信息,按钮是用户用来更换用户名。
在JavaScript部分中的代码如下:

var myHeading = document.querySelector('h1');//获取到h1元素
var myButton = document.querySelector('button');//获取到button元素

//获取用户名的方法
function SetUserName(){
    var myName = prompt('Please enter your name');//通过弹出框使用户输入用户名
    localStorage.setItem('name',myName);//将用户输入的用户名传给‘name’参数
    myHeading.innerHTML = 'Welcome '+myName;//将欢迎信息显示在页面中
}

//判断用户是否初次进入网站
if(!localStorage.getItem('name')){
    SetUserName();//如果不能获取到用户名,证明初次进入网站,从而调用获取用户名的方法
}else{
    var storedName = localStorage.getItem('name');
    myHeading.innerHTML = 'Welcome '+ storedName;//如果获取到用户名,直接显示欢迎信息
}

myButton.onclick = function(){
    SetUserName();//用户点击按钮更改用户名
}

2. cookie创建欢迎信息

cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值。

创建cookie和使用localStorage的方法大致相同,创建cookie的主要代码如下:

<body onLoad="checkCookie()"></body>
function getCookie(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
    return unescape(document.cookie.substring(c_start,c_end))
    } 
    }
    return ""
}

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

接下来对以上代码进行逐步解析。
假设一名新用户第一次进入网站,在执行checkCookie方法的时候将会走else代码块中的部分,网页会显示对话框让用户输入姓名。

function checkCookie()
{
    username=getCookie('username')
    if (username!=null && username!="")
      {alert('Welcome again '+username+'!')}
    else 
      {
      username=prompt('Please enter your name:',"")
      if (username!=null && username!="")
        {
        setCookie('username',username,365)
        }
      }
}

用户输入不为空的用户名以后执行setCookie方法,并传入三个参数,分别是cookie名称,值以及过期天数。现将天数转化为有效的日期,然后将这三个天数存入document.cookie对象。

function setCookie(c_name,value,expiredays)
{
    var exdate=new Date()
    exdate.setDate(exdate.getDate()+expiredays)
    document.cookie=c_name+ "=" +escape(value)+
    ((expiredays==null) ? "" : "; expires="+exdate.toGMTString())
}

当用户第二次进入网站的时候会执行getCookie方法。首先检查 document.cookie 对象中是否存有 cookie。假如 document.cookie 对象存有某些 cookie,那么会继续检查我们指定的 cookie 是否已储存。如果找到了我们要的 cookie,就返回值,否则返回空字符串。

function getCookie(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
    return unescape(document.cookie.substring(c_start,c_end))
    } 
    }
    return ""
}

以上是两种方法的区别,cookie用起来相对来讲不方便,而且有很多缺点:

(1)cookie可能被禁用。当用户非常注重个人隐私保护时,他很可能禁用浏览器的cookie功能;
(2)cookie是与浏览器相关的。这意味着即使访问的是同一个页面,不同浏览器之间所保存的cookie也是不能互相访问的;
(3)cookie可能被删除。因为每个cookie都是硬盘上的一个文件,因此很有可能被用户删除;
(4)cookie安全性不够高。所有的cookie都是以纯文本的形式记录于文件中,因此如果要保存用户名密码等信息时,最好事先经过加密处理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容