PHP-PHP设置COOKIE可否做到关闭标签页即失效?

PHP-PHP设置COOKIE可否做到关闭标签页即失效?

甜柠檬 发布于 2017-10-16 字数 205 浏览 1207 回复 4

貌似只能做到关闭浏览器失效,不知道有什么方法可以做到关闭标签页也失效?

补充:

只有该域名的最后一个标签页被关闭才使cookie失效,不是每个tab页关闭都要失效。

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

瑾兮 2017-10-24 4 楼

可以在页面 unload 方法里,用js清除cookie。

Cookie = {
  "write":function(name, value, expires) {
    if(expires == null) {
      var d = new Date();
      d.setTime(d.getTime() + 24 * 60 * 60 * 1000);
      expires = d.toGMTString();
    }
    document.cookie = name + "=" + escape(value) + ";expires=" + expires;
  },
  "read":function(name) {
    var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
    if(arr!=null) {
      return unescape(arr[2]);
    }
    return null;
  },
  "remove":function(name) {
    var value = Cookie.read(name);
    if(value!=null) {
      document.cookie = name + "=" + value + ";expires=Fri, 02-Jan-1970 00:00:00 GMT";
    }
  }
}
Cookie.write("name", "www.wenjiangs.com");//测试cookie,默认设置一天

//记录打开的地址数量
var host = location.host;
var pageCount = parseInt(Cookie.read(host));
Cookie.write(host, isNaN(pageCount) ? 1 : (pageCount + 1));

window.onunload = function() {
  //判断打开的地址数量
  var pageCount = parseInt(Cookie.read(host));
  pageCount = isNaN(pageCount) ? 0 : (--pageCount);
  if(pageCount == 0) {
    //处理cookie失效
    Cookie.remove(location.host);
    Cookie.remove("name");//清除cookie
    alert(Cookie.read("name"));
  }else {
    Cookie.write(locaion.host, pageCount);
  }
}
晚风撩人 2017-10-21 3 楼

这个是页面相关的,纯php应该是写不出来的,用js做:onunload 事件 触发一个 销毁cookie的函数
如“该域名的最后一个标签页” 是 最后一次打开的标签页吗?如果是的话,可以通过js 获取url 写到cookie里面 不同的标签页的url应该是不同的, 在关闭的时候判断下url是否一样,或者再加个时间。

泛泛之交 2017-10-21 2 楼

关闭标签页cookie是没办法立即失效的,这个是浏览器的行为,PHP在服务器端运行没有什么关系,这个只有通过客户端的技术来实现这个功能。
在浏览器端监控页面的事件,然后清理cookie就可以了。

window.onunload = function() {
date = new Date();
date.setTime(date.getTime() + (0.5 * 60 * 60 * 1000));//单位为毫秒
var expires = '; expires=' + date.toUTCString();
document.cookie = ['key', '=', ‘value’, expires, '; path=/', '', ''].join('');
}

其中key 为 cookie 的键名 ,value 是cookie的值内容,

cookie在firefox中很容易看到,工具->选项->试用自定义历史记录设置->显示cookies,在弹出的窗口中就可以很容易看到cookie的信息了,包括名称、内容、主机、路径、发送条件和过期时间。
在Firefox中可以安装firebug , 在firebug中粘贴js 脚本运行即可。

在ie8中可以运用开发人员工具,粘贴js脚本运行即可。

浮生未歇 2017-10-21 1 楼

这个就有点复杂了,可以想办法记录这个网站打开页面的数目,当数目为0时再结合他们说的 window.onunload = function() {} 来清理掉 cookie,具体记录记录这个网站打开页面的数目的方法可参考一下问题 JS有没有办法判断浏览器打开了某个域名相关的URL个数? 里我的回答,当然代码需要进一步调试优化

就是想办法做一个计数器吧,计数打开的页面,也可以在页面打开及 window.onunload = function() {} 里加上一个 ajax 去调用 php 程序进行计数。