把session的cookie过期时间,以及gc时间都调整到一天。
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
cookie保存时间,如果为0,则只在浏览器关闭之前保存。
这两项相当于是cookie的作用域。不同域名下,cookie互不可见。但是如果把某个cookie的域名设置为notedeep.com (前面没有www),所有notedeep.com 的二级域名也是访问到的。
我们知道SESSION的回收机制是根据SESSION文件的最后访问时间来判断的,如果超过了maxlifetime,则根据回收机率进行回收。所以我们只需要定期的去访问一下SESSION就可以了,而这可以通过刷新页面来实现。
所以对于已经登陆的用户,他的每个请求都已经在访问session,想要延长他的自动登陆时间,只需要延长cookie的时间以及设置maxlifetime即可
session_start 时,就会把 session 数据读取到 $_SESSION 中,无论背后的 handler 是 redis 还是 file。
如果 session_start(['read_and_close' => true]),表示只读,并且读取到 $_SESSION 中之后,立刻结束会话。
只有这次请求需要写 session 时,才设置 read_and_close 为 false。
此时只有当前进程可以读写 session,别的进程甚至不能读,除非用 session_write_close() 释放锁,session_write_close 是把 $_SESSION
通过 handler 写到 redis 或者 file 中。
一般可以当需要写的时候,重新执行session_start(), 让当前进程可以写。写完之后立刻执行 session_write_close() 释放锁
https://www.php.net/manual/en/function.session-set-save-handler.php
https://www.php.net/manual/en/function.session-write-close.php
https://www.php.net/manual/en/function.session-start.php
https://www.php.net/manual/en/session.configuration.php#ini.session.save-handler
session-set-save-handler 当某个会话只需要读 session 时,的第二个参数可以传 false。
没必要最后在 shutdown 的时候再写一次, $_SESSION 又没改变。如果要写,写完后,手动调用 session_write_close 即可。
session.gc_probability 与 session.gc_divisor 合起来用来管理 gc(garbage collection 垃圾回收)进程启动的概率。默认为 1。
session.gc_divisor 与 session.gc_probability 合起来定义了在每个会话初始化时启动 gc(garbage collection 垃圾回收)进程的概率。此概率用 gc_probability/gc_divisor 计算得来。例如 1/100 意味着在每个请求中有 1% 的概率启动 gc 进程。session.gc_divisor 默认为 100。
session.gc_maxlifetime 指定过了多少秒之后数据就会被视为“垃圾”并被清除。 垃圾搜集可能会在 session 启动的时候开始
session.cookie_httponly cookie只能在后端获取,js获取不到, 防止了xss。
session.cookie_secure = 1
如果开启则表明你的cookie只有通过HTTPS协议传输时才起作用。
session.use_only_cookies booleansession.use_only_cookies 指定是否在客户端仅仅使用 cookie 来存放会话 ID。。启用此设定可以防止有关通过 URL 传递会话 ID 的攻击。此设定是 PHP 4.3.0 添加的。自PHP 5.3.0开始,默认值改为1(启用) cookie session。cookie被禁用了怎么办
session.use_cookies booleansession.use_cookies 指定是否在客户端用 cookie 来存放会话 ID。默认为 1(启用)。 url重写技术,把session id 放到url上面。
拿到refer其实就可以比较方便的判断上一次是否在url里面存在session id
session.use_trans_sid booleansession.use_trans_sid 指定是否启用透明 SID 支持。默认为 0(禁用)。 Note: 基于 URL 的会话管理比基于 cookie 的会话管理有更多安全风险。例如用户有可能通过 email 将一个包含有效的会话 ID 的 URL 发给他的朋友,或者用户总是有可能在收藏夹中存有一个包含会话 ID 的 URL 来以同样的会话 ID 去访问站点。
是否可以在url里再增加一个access_token, 前端从后端获取。
后端控制access_token每一个小时过期,通过sessionid + access_token 来识别用户是否有权访问。
如果access_token失效,前端需要重新发起请求,获取新的access_token。