SESSION的理解及优化配置

  • session 与 cookie 的关系

1.session 是存在服务端的,cookie 是存在客户端的。session 是基于cookie 才会存在的。
2.session 必须至少存在一条数据,浏览器上才会有 cookie 值存在
3.cookie 的键,是由 php.ini 中的 session.name 参数决定的,这个是识别用户用的,客户端和服务端都有这个值
4.客户端的cookie 键和值与服务端的 cookie 键值都是一致的。
5.session 数据可以存在任何地方,如果redis中,直接使用 get 即可取出数据
6.session 存在 redis 中就可以解决同域名(但二级域名不同)的跨域问题。比如 a.test.com , b.test.com

客户端请求携带的cookie.png
服务端返回的cookie
session 存在 redis 中

1.SESSION是保存到了服务器上,而cookie是保存在了客户端
2.PHPSESSID是保存在cookie里面
3.SESSION是根据PHPSESSID值来识别用户的
4.同一个浏览器的PHPSESSID值是固定的,正是因为这样,才识别了用户的session
5.拿到PHPSESSID值,就可以拿到本服务器上本客户的所有session
6.多台服务器之间共享SESSION其实是要做到PHPSESSID共享
7.PHPSESSID只要不关闭网页,怎么刷新都是一样
8.在 PHP 中,保存 session_id 的 cookie 名称默认叫作PHPSESSID,这个名称可以通过 php.ini 中session.name来修改,也可以通过函数 session_name()来修改。

无论是通过调用函数 session_start() 手动开启会话, 还是使用配置项 session.auto_start 自动开启会话, 对于基于文件的会话数据保存(PHP 的默认行为)而言, 在会话开始的时候都会给会话数据文件加锁, 直到 PHP 脚本执行完毕或者显式调用 session_write_close() 来保存会话数据。 在此期间,其他脚本不可以访问同一个会话数据文件。

对于大量使用 Ajax 或者并发请求的网站而言,这可能是一个严重的问题。 解决这个问题最简单的做法是如果修改了会话中的变量, 那么应该尽快调用 session_write_close() 来保存会话数据并释放文件锁。 还有一种选择就是使用支持并发操作的会话保存管理器来替代文件会话保存管理器。

  • php.ini中的session配置

[Session]

session.save_handler = files

session.save_path = "/tmp"

session.use_cookies = 1

session.name = PHPSESSID

session.auto_start = 0

session.cookie_lifetime = 0   // 发送到浏览器的 cookie 的生命周期

session.serialize_handler = php

session.gc_divisor = 1000

session.gc_probability = 1

session.gc_maxlifetime = 1440
  • 如果使用 redis存储。memcache 存储的设置是一样的
session.save_handler = redis

session.save_path = "tcp://127.0.0.1:6381"  // 也可以不不添加 tcp
需要用到tcp来连接redis,如果你设置reids 有密码访问的话,这样加上就可以了:
tcp://127.0.0.1:6381?auth=authpwd

session同步

在做了web集群后,你肯定会首先考虑session同步问题,
因为通过负载均衡后,同一个IP访问同一个页面会被分配到不同的服务器上,
如果不同的服务器用的是不同的redis服务,那么可能就会出现,一个登录用户,一会是登录状态,一会又不是登录状态。
所以session这个时候就要同步了。刚好,我们选择用redis作为了存储,是可以在多台redis 服务器中同步的。

具体可以搜索 reidis主从同步或者redis 集群

为什么重启浏览器后 Session 数据就取不到了

session.cookie_lifetime 以秒数指定了发送到浏览器的 cookie 的生命周期。值为 0 表示"直到关闭浏览器"。默认为 0。

如何设置一个严格30分钟过期的Session

使用memcache, redis等,因为他们本身就支持过期时间设置,他们又是键值对存储方式

1. 设置Cookie过期时间30分钟, 并设置Session的lifetime也为30分钟.

2. 自己为每一个Session值增加Time stamp.

3. 每次访问之前, 判断时间戳.

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