cookie属性max-age与expires同时存在时谁会生效

    我以前面试前端的时候,面试官问过这个问题,这是一个比较刁钻的问题,好像很难选择。

    max-age表示最大生命周期,expires表示过期时间,cookie使用其中任何一个,都可以用来限制cookie的生效时间。

    如果同时使用,max-age会生效。

    这两者在时间设置上,却有不同单位属性。expires使用的是当前时间的毫秒+过期的毫秒,因此单位以ms计,而max-age直接使用秒为单位。

    下面给出一个直观的示例,分别演示使用expires,max-age,同时使用expires与max-age时的效果。

    index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>cookie</title>
    <style>
        #root input{padding:10px;border:1px solid #ddd;color:#fff;border-radius: 3px;background: lightgreen;font-size: 16px;}
        #root .box{padding:5px;}
        #root textarea{width:790px;height:200px;resize: none;}
    </style>
</head>
<body>
    <div id="root">
        <div class="box">
            <input type="button" value="expires" onclick="handlecookie(1)"/>
            <input type="button" value="max-age" onclick="handlecookie(2)"/>
            <input type="button" value="expires max-age" onclick="handlecookie(3)"/>
        </div>
        <div class="box">
            <textarea id="output"></textarea>
        </div>
    </div>
	<script src="https://code.jquery.com/jquery-1.12.4.js" ></script>
	<script>
        function setCookie(name,value,expires,maxAge){
          var now = new Date()
          now.setTime(now.getTime()+expires)
          var cookiestr = name+"="+value
          if(expires)
            cookiestr+="; expires="+now.toGMTString()
          if(maxAge)
            cookiestr+="; max-age="+maxAge
          document.cookie = cookiestr;
        }

        var count = 1;
        var timeout;
        function getCookie(name){
          var cookiestr = document.cookie+"#"+(count++);
          var val = $("#output").val()
          val += cookiestr+"\n"

          if(document.cookie){
            $("#output").val(val)
            timeout = setTimeout(function(){
              getCookie(name)
            },1000)
          }else{
            clearTimeout(timeout)
          }

        }

        function handlecookie(type){
          var expires = 5*1000;
          var maxAge = 10;
          count = 1
          clearTimeout(timeout)
          if(type==1){
            setCookie("age","18",expires)
          }else if(type==2){
            setCookie("age","18",0,maxAge)
          }else{
            setCookie("age","18",expires,maxAge)
          }
          getCookie("age")
        }
	</script>
</body>
</html>

    页面上有三个按钮,依次点击,看效果:过期时间设置的是5秒,最大生命周期设置的是10秒,单独设置,各自生效,一起设置max-age生效。

    第一个按钮:

     

    第二个按钮:

    

    第三个按钮:

    

    第三个按钮效果与第二个按钮效果一样,实际上是因为max-age属性生效了。

    

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值