Cookie和Session有哪些区别?
时间:2020-12-30
来源:互联网
Cookie和Session有哪些区别?其实,两者作为PHP会话管理的差异是显而易见的。Cookie是数据存储在浏览器端,最大的优点是方便与JS交换数据和获取用户信息。而Session数据存储在服务器,它的优势是安全高效,不依赖浏览器端环境。严格来说,两者各自有着千丝万缕联系的同时,也是相互区别的。下面小编来带大家一起认识一下Cookie和Session。
1、什么是Cookie
HTTP 是无状态的协议:每个请求都是完全独立的,服务端无法确认当前访问者的身份信息,无法分辨上一次的请求发送者和这一次的发送者是不是同一个人。所以服务器与浏览器为了进行会话跟踪,就必须主动的去维护一个状态,这个状态用于告知服务端前后两个请求是否来自同一浏览器。而这个状态需要通过 cookie 或者 session 去实现。
Cookie存储在客户端:Cookie是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。Cookie是不可跨域的: 每个Cookie都会绑定单一的域名,无法在别的域名下获取使用,一级域名和二级域名之间是允许共享使用的。
Cookie重要的属性属性说明name=value键值对,设置Cookie的名称及相对应的值,都必须是字符串类型。如果值为 Unicode 字符,需要为字符编码。如果值为二进制数据,则需要使用 BASE64 编码。domain指定Cookie所属域名,默认是当前域名指定Cookie在哪个路径(路由)下生效,默认是 '/'。如果设置为 /abc,则只有 /abc 下的路由可以访问到该Cookie,如:/abc/read。maxAgecookie 失效的时间,单位秒。如果为整数,则该Cookie在 maxAge 秒后失效。如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该 cookie 。如果为 0,表示删除该Cookie,默认 -1。
比expires好用。expires过期时间,在设置的某个时间点后该Cookie就会失效。一般浏览器的Cookie都是默认储存的,当关闭浏览器结束这个会话的时候,这个Cookie也就会被删除secure该Cookie是否仅被使用安全协议传输。安全协议有 HTTPS,SSL等,在网络上传输数据之前先将数据加密。默认为false。当 secure 值为 true 时,Cookie在 HTTP 中是无效,在 HTTPS 中才有效。Cookied如果给某个Cookie设置了 httpOnly 属性,则无法通过 JS 脚本 读取到该 cookie 的信息,但还是能通过 Application 中手动修改Cookie,所以只是在一定程度上可以防止 XSS 攻击,不是绝对的安全
2、认识Session
Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。Session是另一种记录服务器和客户端会话状态的机制;Session是基于Cookie实现的,Session 存储在服务器端,SessionId会被存储到客户端的Cookie中。
Session认证流程:用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建对应的Session。请求返回时将此Session的唯一标识信息SessionID 返回给浏览器,浏览器接收到服务器返回的SessionID 信息后,会将此信息存入到 Cookie中,同时Cookie记录此SessionID 属于哪个域名。当用户第二次访问服务器的时候,请求会自动判断此域名下是否存在 Cookie 信息,如果存在自动将 Cookie 信息也发送给服务端,服务端会从Cookie中获取SessionID,再根据SessionID 查找对应的 Session 信息,如果没有找到说明用户没有登录或者登录失效,如果找到Session证明用户已经登录可执行后面操作。根据以上流程可知,SessionID是连接Cookie和Session的一道桥梁,大部分系统也是根据此原理来验证用户登录状态。
3、Cookie和Session区别:
(1)Session保存在服务端,Cookie保存在客户端。
(2)因为Cookie存在客户端,用户可以看见进行编辑伪造,所以安全性低。
(3)Session对象是在服务器内存中的,而基于窗口的Cookie是在客户端内存中的。
(4)Cookie不是很安全,别人可以分析存放在本地的Cookie,进行Cookie欺骗。
-
Web3钱包密码忘记了怎么办?能找回吗?如何创建并使用Web3钱包? 时间:2025-04-30
-
不同链的钱包怎么跨链转账?两种不同链的钱包转账方法详解 时间:2025-04-30
-
Web3钱包怎么授权?Web3钱包授权了未知名项目怎么办? 时间:2025-04-30
-
Solana(SOL)十大最佳钱包盘点(2025最新) 时间:2025-04-30
-
币圈新人如何创建使用币安钱包?币安钱包图文教程 时间:2025-04-30
-
什么是TokenPocket钱包?如何创建使用TP钱包? 时间:2025-04-30
今日更新
-
PHP学习路线以及10个PHP优化技巧
阅读:20
-
50个技巧提高你的PHP网站程序执行效率
阅读:26
-
PHP程序员危机:如何快速成长为不可或缺的技术人才?
阅读:32
-
PHP实现文件安全下载的程序讲解
阅读:26
-
比Java更具争议的PHP,处处留坑?
阅读:26
-
《赛博朋克2077》免费DLC明年初陆续上线 风评能否好转?
阅读:32
-
H5页面唤起支付宝实现支付功能教程
阅读:23
-
steam喜加一!《Airborne: Trials》免费领取地址
阅读:19
-
PHP的抽象类的使用教程
阅读:24
-
steam喜加一!《谎言王座》免费领取地址
阅读:25