彻底解决PHP Session不过期以及SessionId保持不变的问题
为什么80%的码农都做不了架构师?>>>
用过asp.net里面的session再用过php里面的session,你会觉得php 的session相比asp.net里面的session是如此的不爽。在用php的session,你可能会遇到session不失效,关掉浏览器session还存在,重新打开浏览器sessionid还和以前一样等问题。。。
下面我们就来看下php的session机制:
session 回收机制:
PHP采用Garbage Collection process对过期session进行回收,然而并不是每次session建立时,都能够唤起 ‘garbage collection’ process ,gc是按照一定概率启动的。这主要是出于对服务器性能方面的考虑,每个session都触发gc,浏览量大的话,服务器吃不消,然而按照一定概率开启gc,当流览量大的时候,session过期机制能够正常运行,而且服务器效率得到节省。细节应该都是多年的经验积累得出的。
三个与PHP session过期相关的参数(php.ini中):
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
gc启动概率 = gc_probability / gc_divisor = 0.1%
session过期时间 gc_maxlifetime 单位:秒
当web服务正式提供时,session过期概率就需要根据web服务的浏览量和服务器的性能来综合考虑session过期概率。为每个session都开启gc,显然是不明智的,感觉有点“碰运气”的感觉,要是访问量小命中几率就小。我在本机测试过程中,几乎都没有被命中过,sessionid几天都不变,哪怕机器重启。测试过程中,这个过期概率值要设置大一点命中几率才高点。
通过修改php配置文件的过期概率值,可以“碰运气”式的设置session过期,那有没有更好的办法呢?
下面写的这个session类可以彻底解决session不过期以及sessionid不变的问题。
<?php/*** 扩展Session类(简单封装)* * @author slimboy**/
class Session { /*** 初始化*/ static function _init(){ ini_set('session.auto_start', 0); //Session::start(); } /*** 启动Session*/ static function start() { session_start(); } /*** 设置Session* * @param $name Session名称* @param $value 值* @param $time 超时时间(秒)*/ public static function set($name,$value,$time){ if(empty($time)){ $time = 1800; //默认值 } $_SESSION[$name] = $value; $_SESSION[$name.'_Expires'] = time() + $time; } /*** 获取Session值* * @param $name Session名称*/ public static function get($name){ //检查Session是否已过期 if(isset($_SESSION[$name.'_Expires']) && $_SESSION[$name.'_Expires']>time()){ return $_SESSION[$name]; }else{ Session::clear($name); return null; } } /*** 设置Session Domain* * @param $sessionDomain 域* @return string*/ static function setDomain($sessionDomain = null) { $return = ini_get('session.cookie_domain'); if(!empty($sessionDomain)) { ini_set('session.cookie_domain', $sessionDomain);//跨域访问Session } return $return; } /*** 清除某一Session值* * @param $name Session名称*/ static function clear($name){ unset($_SESSION[$name]); unset($_SESSION[$name.'_Expires']); } /*** 重置销毁Session*/ static function destroy(){ unset($_SESSION); session_destroy(); } /*** 获取或设置Session id*/ static function sessionid($id=null){ return session_id($id); } }
?>
简单调用:
<?php//设置session Session::set('UserId', $userid, 3600); //读取session$userId = Session::get('UserId');
?>
转载于:https://my.oschina.net/junn/blog/309311
彻底解决PHP Session不过期以及SessionId保持不变的问题相关推荐
- SpringSession+redis解决分布式session不一致性问题
七.案例实战:SpringSession+redis解决分布式session不一致性问题 步骤1:加入SpringSession.redis的依赖包 <dependency><gro ...
- 利用spring session解决共享Session问题
https://blog.csdn.net/patrickyoung6625/article/details/45694157 1.共享Session问题 HttpSession是通过Servlet容 ...
- 解决shiro重定向URL中出现sessionID的情况localhost:8080/toLogin;jsessionid=D5C1EE61B97EE2D7098F58A837B82BD4
先直接说解决办法: 直接在shiro配置类中添加一下代码就能解决: @Configuration public class MyShiroConfig {/*** 解决shiro的URL中出现sess ...
- 自动延期时间 php,延长session的过期时间
PHP中的session永不过期 不修改程序是最好的方法了,因为如果修改程序,测试部一定非常郁闷,那么只能修改系统环境配置,其实很 简单,打开php.ini设置文件,修改三行如下: 1.session ...
- 170222、使用Spring Session和Redis解决分布式Session跨域共享问题
使用Spring Session和Redis解决分布式Session跨域共享问题 原创 2017-02-27 徐刘根 Java后端技术 前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用 ...
- 解决spring-security session超时 Ajax 请求没有重定向的问题
解决spring-security session超时 Ajax 请求没有重定向的问题 参考文章: (1)解决spring-security session超时 Ajax 请求没有重定向的问题 (2) ...
- 程序员过关斩将--解决分布式session问题
微信搜一搜 架构师修行之路 session 说到 session,我相信每个程序员都不陌生,或多或少在项目中使用过.session 这个词,其实是一个抽象的概念,它不像 Cookie 那样有着明确的定 ...
- 一个判断session是否过期的小技巧
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Session一直是我们做web项目经常使用的,以前没太注意,这次又细致的看了下! 1.sessio ...
- java session 永不过期_Java Web Application使Session永不失效(利用cookie隐藏登录)
在做 Web Application 时,因为 Web Project 有 session 自动失效的问题,所以如何让用户登录一次系统就能长时间运行三个月,就是个问题. 后来,看到 session 失 ...
最新文章
- 一道让你拍案叫绝的算法题
- 【统计学习方法】感知机对鸢尾花(iris)数据集进行二分类
- 「AI 质检员」在富士通工厂上岗,检测效率比人工提升 25%
- object-c html,object.html
- 星空主题设计理念_敏捷协调,智慧运营:金蝶云·星空的产品设计理念与应用实践...
- LeetCode MySQL解题目录
- 【学习笔记】网络层——网络层设备、移动IP、IP组播
- 不看就亏系列!这里有完整的 Hadoop 集群搭建教程,和最易懂的 Hadoop 概念!| 附代码...
- 离婚率逐年上升,数据分析告诉你背后的主因竟然是它!
- attributeerror python_python练习类的时候遇到了AttributeError?
- Android文件的读写
- 最厉害的象棋软件_太牛了!象棋史上最厉害人机高手竟弃车跟软件对杀,就问你敢不敢...
- AD637 有效值检测
- 微信小程序自定义字体
- 链接脚本在编程中的高级运用之一:可变长数组
- 基于Sentinel的高可用限流系统HASentinel设计及实现
- ME909 ECM拨号上网总结
- 三年级江苏凤凰出版社计算机,苏教版小学信息技术三年级下册教案全集
- 备份路由器配置文件到服务器,教你如何备份路由器配置文件
- (已更新)新版帝国cms内核试玩佣金WAP手机版网站源码,可打包APP