三、理解session和cookie

服务器为何需要知道谁在请求

http请求是无状态的,客户端浏览器发送请求到服务端,服务端处理请求并返回就结束了,当该客户端再次请求服务端,是无法知道是否为同一个用户在访问。例如用户在购物网站选择商品加入购物车,下单结算。用户再次访问该网站,是需要获得自己购物车数据,订单中商品数据的。

何为一次会话

我们使用浏览器访问一个网站,不管我们在该网站点击了多少链接,进入过多少页面,直到我们关闭浏览器称之为一次会话。

如何识别是否是同一个用户发送的多次请求

用户使用浏览器第一次请求服务端,服务端如果能产生一个唯一id,并将这个id发送给客户端浏览器,以后用户再在该网站访问其他页面时将这个id携带上一并发送给服务器,服务器不就知道这些请求来自同一个id,即同一个用户。我们提供登录页面,用户输入账户名、密码登录,我们将这个id对应到这个账户名上存储在服务器文件里,用户再发送请求过来时携带上这个id,服务器拿到这个id从文件中寻找,找到对应的用户名,就可以知道这次请求是这个账户了。

session和cookie如何配合维持状态【实现登录】

session就是服务端产生的这个唯一id,并存储在服务端文件中,cookie则保存着这个id,浏览器每次访问服务器都会携带上这个id,cookie存储在本地电脑上。

当我们使用浏览器第一次访问一个网站,服务器发现没有id就会产生一个唯一session id,并存储在服务器上,同时会发出写cookie的指令,用户浏览器接收到写cookie指令就会在用户电脑的临时目录生成cookie文件,并包含键名为PHPSESSID,值为这个id。以后访问该网站,浏览器会自动携带该cookie。

【cookie有有效期,不设置则为会话级别,即关闭浏览器这个cookie就失效了】cookie存储在用户本地电脑,所以安全性很差,不能将敏感信息存入其中,例如密码。

session的过期时间一般为每次访问则延长为当前时间30分钟后的时间。所以用户长时间不操作就会过期,要求重新登录,此时服务端seesion id也会刷新,并发出写cookie指令要求浏览器更改id值。

不同网站要求浏览器写cookie,浏览器访问某网站,只会携带该网站的cookie。cookie有域的概念,如果没有域,浏览器可以携带登录银行网站的cookie到我的网站,我是否可以拿这个cookie访问这个银行网站,结果是登录状态,可以转钱了。

cookie在相同内核的浏览器之间是共享的,不同内核浏览器是不共享的例如火狐和IE【存放位置都不同,当然不共享】

session过期特别说明:

session的过期是发呆时间,假如设置10分钟过期,当9分钟的时候你操作了这个页面则会重新计时。

session配置:

session 可以通过php.ini配置,来修改session存储的位置,默认会以文件形式存储在服务器上,设置成user就可以自定义处理器来存取session数据。企业中一般会存储在redis和数据库中,应对高并发和负载均衡多台服务器间session共享。

vi /usr/local/etc/php/7.2/php.ini 
session.save_handler = files

禁用cookie,还可以登录吗?

服务器端产生的session id,如果cookie被禁用,服务器发送的写cookie指令就无法将session id 写入到客户端电脑cookie中,访问该网站就无法携带cookie过去,也就无法拿到session id。关键问题是cookie不能作为中介携带session id 给服务器,可以换一个,例如浏览器在访问该网站其他页面时,在其url后面自动携带上PHPSESSID=xxxxxxxxxxxxx的参数就可以,服务器获得该参数也一样可以识别是哪个客户端在访问。如何设置url上进行携带,只要在服务器端进行配置。

禁用cookie可以登录,如果不使用session还能登录吗?

实际我们不使用cookie和session依然可以做到维持状态,即登录。只要客户端传入用户名、密码,服务端完成验证,通过之后,即产生一个令牌(唯一随机数),存储令牌对应用户在数据库【mysql或者redis等】并返回给客户端(浏览器或者app等),以后再访问服务器获取数据时,携带上这个令牌,服务器拿到令牌就可以知道对应的哪个用户,然后返回该用户的数据。如果令牌一直不过期,浏览器或者手机app拿到的令牌也一直保留,就永远是登录状态。实际企业项目,这个令牌是有过期时间的,比如一种策略是每访问一下,延长令牌时间,半个月未访问则过期,而且请求数据会进行加密。

浏览器7天自动登录如何实现
现象:

当我们登录一些网站,直接关闭浏览器而非点击退出,再次打开该浏览器则还是登录状态

原因:

点击退出称为安全退出,其实就是点击退出,服务器程序则销毁了我们存储在服务端的session内容和id,直接关闭则没有删除服务器端session,而cookie的过期时间设置一般会比较长,关闭浏览器,访问该网站的cookie还在我们本地电脑上存储着,所以当打开浏览器再次访问该网站的时候就会携带上该网站的cookie,服务器端还存在session id,能够匹配到账户,所以还是登录状态。如果将cookie设置成会话级别,关闭浏览器cookie就过期消失了,打开浏览器再次访问该网站已无该网站cookie携带了,也就不会是登录状态。所以要实现7天自动登录,本地电脑上的cookie7天后才能过期,服务端的session id如果也7天后过期就可以实现7天自动登录,确实session id可以存到数据库等地方。项目中我们会生成一个令牌对应这个登录账户并保存在数据库中,将令牌通过写cookie的方式保存在用户本地电脑上,用户再次访问时携带这个令牌,服务器通过令牌查找对应账户,从而获取该账户信息。
例如还有一种实现逻辑,服务器验证用户名密码通过后,会产生令牌,将令牌和对应用户信息进行加密生成密文,通过写cookie指令将明文令牌和密文返回给浏览器,保存在本地电脑7天。用户以后再访问该网站时,浏览器会携带cookie(明文令牌和密文)给服务器,服务器通过解密获取密文中的用户信息和令牌,比对密文中的令牌和明文令牌完成验证,验证通过则根据密文中用户信息生成当前用户访问session,这样服务不需要存储令牌对应用户信息,完成了自动登录。如果我能拿到张三自动登录网站的cookie,就可以实现登录。所以用户勾选自动登录选项时最好使用自己的私人电脑,不要在公共电脑使用该功能。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容