问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

cookie与session的区别和联系

发布网友 发布时间:2022-04-07 05:22

我来回答

3个回答

懂视网 时间:2022-04-07 09:43

几年前面试的时候我碰到了一个这样的问题:

如何保证session在1小时后失效?

当时我想这个还不简单,将gc_maxlifetime设置为3600不就行了。当时面试的人说,回答的不对,这样不能保证1小时后肯定失效。当然他也没和我说原因。后来我回去后,仔细查找了一番,才搞清楚。

回答这个问题前,先普及下cookie和session的知识。

COOKIE与SESSION的区别与联系

存储位置的不同:

  • cookie存储在客户端

  • session存放在服务端

  • 他们之间的联系:

    当服务端开启session后,即

    session_start();

    后,会生成一个唯一ID(session_id),并通过响应头告诉客户端。客户端拿到后,会将它保存在cookie中。当客户端再次发起请求时,会带上这个信息。服务端收到这个信息后,就会去存放session文件的目录去查找对应文件,找到后会去提取session信息。就是通过这样的机制,服务端识别了客户端的身份。

    所以说,如果没有cookie,session就没有任何意义。

    介绍完cookie与session的关系后,我们再来说说session的有效期。

    SESSION的垃圾回收

    一般php默认的session有效期为24分钟。客户端在超过这个时间后一直没有发出请求,就会有可能触发垃圾回收机制,删除过期的session文件。为什么说有可能?这就要说说垃圾机制的原理了。

    php的session垃圾回收是有概率的,是由session.gc_probability和session.gc_diviso确定概率的。概率为

    session.gc_probability/session.gc_diviso

    php默认gc_probability是1,而gc_diviso默认为100,也就是说每次请求触发垃圾回收的概率为1/100。一般的,当我们网站访问量大的时候,可以将这个概率提高,比如1/1000,以减少io操作。

    另外还有一点要说明:比如客户端A,此时新建了一个session(session的有效期为10分钟),过了8分钟后,A又发送了请求。这个时候他的session是2分钟后到期,还是10分钟后到期?

    答案是10分钟后。因为第二次请求后,服务端的session文件的修改时间也改变了。垃圾回收是看session文件最后的修改时间。但是大家再想想,对应的cookie有效期是不是也会更新?很可惜,cookie有效期不会更新。

    如何保证1小时一定过期

    现在,我们来看最初的问题,如何保证session文件一个小时后一定过期。session的垃圾回收是概率事件,所有不能指望他了。

    那通过设置cookie的有效期了,通过设置cookie_lifetime可以做到么?

    答案还是不行。cookie是在客户端的,他没有了,只是在下次请求的时候不能带上这个cookie了,但对应的session文件还是存在的。

    其实这个问题最简单的做法,是将session保存在redis中,通过redis的键的过期时间来保证1个小时候,一定过期。该方法也是推荐的方法

    但只能用php的话,要怎样来完成呢?

    可以为每一个session都设置一个时间戳,每次访问前都判断时间戳。贴上代码:

    <?php
    session_start([
     'cookie_lifetime' => 3600,
     'gc_maxlifetime' => 3600
    ]);
    
    if (isset($_SESSION['lifetime']) && $_SESSION['lifetime'] > time()) {
     // 未过期,更新session的lifetime及cookie的有效期
     $_SESSION['lifetime'] += 3600;
     $tmpVal = $_COOKIE[session_name()];
     setcookie(session_name(), $tmpVal, time() + 3600, '/');
    } else {
     // 过期删除
     $_SESSION = [];
     if (isset($_COOKIE[session_name()])) {
     setcookie(session_name(), '', time() - 100, '/');
     }
     session_destroy();
    }

    通过阅读了该内容,相信大家对php的会话应该有了更深的理解。

    热心网友 时间:2022-04-07 06:51

    cookie
    和session
    的区别:
    1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
    2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗
    考虑到安全应当使用session。
    3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
    考虑到减轻服务器性能方面,应当使用cookie。
    4、单个cookie保存的数据不能超过4k,很多浏览器都*一个站点最多保存20个cookie。
    cookie
    和session
    的联系:
    session是通过cookie来工作的
    session和cookie之间是通过$_cookie['phpsessid']来联系的,通过$_cookie['phpsessid']可以知道session的id,从而获取到其他的信息。
    在购物网站中通常将用户加入购物车的商品联通session_id记录到数据库中,当用户再次访问是,通过sessionid就可以查找到用户上次加入购物车的商品。因为sessionid是唯一的,记录到数据库中就可以根据这个查找了。

    热心网友 时间:2022-04-07 08:09

    cookie
    和session
    的区别:
    1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
    2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
    考虑到安全应当使用session。
    3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
    考虑到减轻服务器性能方面,应当使用COOKIE。
    4、单个cookie保存的数据不能超过4K,很多浏览器都*一个站点最多保存20个cookie。
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    工程制图会学什么电脑操作CAD制图 电脑装了声卡驱动还是没声音如何处理_电脑装了声卡驱动还是没声音怎么... 关于the reason why…is that…句型 用the reason why...is that..句型回答选择朗诵我不再归去这首诗原因... the reason why is that造句 一篇文章教你学会尺寸标注的所有知识 信贷公司一般什么流程 电脑如何为qq音乐设置快捷方式怎样将qq音乐的图标显示到桌面上 我是做凉皮销售的,想买一台圆形凉皮机,不知道哪款好,求推荐 请问哪位朋友用的圆形凉皮机,好用吗? ouyang7755是真的美胸导师吗?麻烦经历过的姐妹们告诉我,谢谢。 鑫鑫丰胸老师 有个叫夏乔悦的丰胸老师是骗子吗? 丰胸茗茗老师的码是多少 xieyun1122丰胸指导老师是不是骗子 李老师丰胸ffxx699 一眼看到结局的38岁乡镇公务员,是否应该辞职去外面闯一闯呢? 新买的衣服有狐臭味这衣服洗了还能穿吗会不会对身体不 不合拍的情感能继续多久? 怎样去除衣服上的狐臭味 。 香港有没有比李嘉诚更富的人 “历尽前贤国与家,成由勤俭败由奢”——说明了什么道理 林则徐、林觉民、林徽因,是同宗吗? 衣服有狐臭味怎么洗 怎样去除衣服上的狐臭味道 香港首富李嘉诚住在哪里? 我的衣服有狐臭怎么去除那个味道洗好几次还是那样 姚安娜进军娱乐圈,任正非为何要支持小女儿搞文艺? 怎样去除衣服上的狐臭味!! 郭鹤年年入千亿却要干到百岁,67岁还能和妻子生娃,如此神人有几任妻子? 网上丰胸老师可信吗莎莎gf72139是骗子吗? 我想查kefu2828 是我想找的丰胸老师!请问用什么方法才能联系到她! 丰胸医生的是什么 丰胸朋友的码 丰胸专家的女 什么色头发显白 什么 颜色的头发比较显白,除了亚麻 怎么给桌面添加一个网页的超链接 游戏人生 白的头发是什么颜色 染什么颜色的头发又显白有什么区别 保险可以提前生效吗 linux 虚拟机 内存 虚拟机装linux要多少内存 linux64位虚拟机所需要的最佳内存 linux java虚拟机默认内存多大 雅思考试难度如何?相当于英语几级? ? 请问是雅思的难度大还是国家四六级难度大,或者和国内考研英语比较呢??? 雅思英语6.5分等于大学英语几级啊 托福雅思的难度相当于英语几级 求计算机方面的本科毕业论文