php - 谁能生动解释下会话怎样理解,能举个例子吗~

查看:93
本文介绍了php - 谁能生动解释下会话怎样理解,能举个例子吗~的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

浏览器每打开一个页面,都算建立一个新的会话吗?

解决方案

会话是维护某些连续访问状态的,HTTP是无状态的,你先打开 http://www.xxx.com/1/ 再打开 http://www.xxx.com/2/ 或者你刷新了一下页面,在服务器这边我怎么知道你是同一个人呢?IPv4 不靠谱,你一个公司可能就一个外部 IP,如果再经过几级非透明的代理,就更没准了。

但是这种想要维持状态需求是硬需求呀,总的解决呀。如是就想出只要每次请求,都带上一个标明唯一身份的ID不就搞定了,如果第一次没带,就给他指定一个。在具体的实现里,通常通过 Cookie 或附加在 URL 上传递,这个 ID 也就是 SessionID,通常不同的服务端环境会有固定的名称,比如 PHP 的通常叫 PHPSESSID, Servlet 的通常叫 jsessionid 等等,当然你可以取个其他名字,只要达成传递"标明身份的ID"这一目的即可。

再说说服务端的 SESSION 是怎么回事。服务端对 SESSION 来说就相当于有个 Key-Value 数据库,这个库可以是文件系统,也可以是其他关系数据库、键值数据库。通过浏览器送过来的 SessionID,取出对应的 Session 数据,这个数据,就是通常说的会话数据了。


你提到浏览器每打开一个页面,都算建立一个新的会话吗?,这个问题很好,这里要说下会话的生命周期,其实应该分两块讲,一个是会话ID的生命周期,一个是会话数据的生命周期。

会话ID的生命周期:目前比较普遍的传递 SessionID 的方法是通过 Cookie 来传递,一条 Cookie 记录大概有这么几个属性:名称、取值、路径、域名、过期时间等,你提到的打开一个页面,我想应该纠正为打开浏览器,这种过期时间通常称为会话期,也就是关闭、重开浏览器,原cookie就失效(亦即不再传递了)。但并非所有 SessionID 的过期都必须如此,你可以为你的 sessionid 的 cookie 设置有效期,并可以在每次访问时都加长这个时间,这样即使关闭再开浏览器,只要用户不手动清空 cookie 都可以继续传递,继续记住你的状态。

会话数据的生命周期:在服务端,我们同样可以为 Session 设置一个过期时间,如超过 30 分钟无读写就失效(亦即删除或不返回)。当然,不同的服务端软件环境,可能有不同的对此时间的默认设置和设置方法。


再说说登录的事。

用户登录跟这个 Session 有什么关系呢?简单来说,登录就是在你的 Session 数据里记录了你的用户身份,亦即将当前 SessionID 与用户(ID) 直接进行了关联,当然如果你乐意,你的 SessionID 可以与用户ID完全等同(最好加密或混淆)。

Session 跟登录状态并没必然的关系,比如你上某电商网站,你不登录也一样的把商品放到你的购物车,对电商网站来说,他可以把你的购物车数据放在 Session,Cookie,LocalStoreage,SesisonStoreage 都行,第一个在服务端,第二个客户端、服务端同步传递,后两个是纯客户端的。不管什么办法,此时对电商网站来说只需要知道某个临时客户 ABCDEF(SessionID) 拿了这一堆东西,到你要结账时才需要你登录表明身份,好让你付钱和寄送到你早已填好的地址。如果这个电商觉得他跟你之后的交易也不多(一锤子买卖),根本不想知道你是谁,付款流程也很简单(扫扫二维码),他完全可以不需要你登录。

最明显的例子是众多的广告平台,到处嵌码来追踪你的 Cookie (其实就是记录和分析你的一些浏览状态、浏览历史),这样他就知道你去过哪些网站,都喜欢什么内容,就可以定向给你推送广告了。但为了避免不必要的麻烦,他并不想知道你具体是谁(或不愿你知道他的存在),他就可以不需要给你弹那么个登录对话框了;这种情况下,你在他的平台是匿名的,但他仍然可以了解你很多。


因为自己以前做过多年互联网广告领域的开发,每次跟人解释广告这个例子的时候,别人都很害怕,怎么种个 cookie 就能跟踪我的浏览记录了?

不是这样的。

广告平台会跟内容网站合作,让内容网站嵌入一小段代码,这个代码可以是一个js、或者 <script> 标签、或者 <iframe> 标签、或者 <img/> 标签,总之需要做到你打开此页面时,浏览器也会去请求下广告平台的某个 URL 地址,广告平台通过此请求带过的参数、Referer 等,分析得出你看的是什么类型的内容、停留多久等等,记录下需要的信息,并分析出你的兴趣、爱好。比如你常看手机测评的网页,广告平台得出你近期喜欢智能手机的结论,甚至还能据此分析出你喜欢低价位还是高价位的手机,然后给你打上标签,这样给你的广告就能重点推送符合你兴趣的广告了。

也就是说,没嵌追踪代码的网站,他也无从追踪你的脚步。

坏消息是,你以为都白给你看吗?

那么有没有办法防御呢?答案是肯定的,因为通常来说,你访问的网站的域名和广告平台的并不一致,所以…… 我也懒得敲了,参见:http://baike.sogou.com/v63400314.htm?fromTitle=Do+Not+Track

当然了,俗话说道高一尺魔高一丈,这场战争没那么容易结束。


哥们,我写这么多容易吗?你好歹给点个赞吧 ^________^。

这篇关于php - 谁能生动解释下会话怎样理解,能举个例子吗~的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆