为什么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保持不变的问题相关推荐

  1. SpringSession+redis解决分布式session不一致性问题

    七.案例实战:SpringSession+redis解决分布式session不一致性问题 步骤1:加入SpringSession.redis的依赖包 <dependency><gro ...

  2. 利用spring session解决共享Session问题

    https://blog.csdn.net/patrickyoung6625/article/details/45694157 1.共享Session问题 HttpSession是通过Servlet容 ...

  3. 解决shiro重定向URL中出现sessionID的情况localhost:8080/toLogin;jsessionid=D5C1EE61B97EE2D7098F58A837B82BD4

    先直接说解决办法: 直接在shiro配置类中添加一下代码就能解决: @Configuration public class MyShiroConfig {/*** 解决shiro的URL中出现sess ...

  4. 自动延期时间 php,延长session的过期时间

    PHP中的session永不过期 不修改程序是最好的方法了,因为如果修改程序,测试部一定非常郁闷,那么只能修改系统环境配置,其实很 简单,打开php.ini设置文件,修改三行如下: 1.session ...

  5. 170222、使用Spring Session和Redis解决分布式Session跨域共享问题

    使用Spring Session和Redis解决分布式Session跨域共享问题 原创 2017-02-27 徐刘根 Java后端技术 前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用 ...

  6. 解决spring-security session超时 Ajax 请求没有重定向的问题

    解决spring-security session超时 Ajax 请求没有重定向的问题 参考文章: (1)解决spring-security session超时 Ajax 请求没有重定向的问题 (2) ...

  7. 程序员过关斩将--解决分布式session问题

    微信搜一搜 架构师修行之路 session 说到 session,我相信每个程序员都不陌生,或多或少在项目中使用过.session 这个词,其实是一个抽象的概念,它不像 Cookie 那样有着明确的定 ...

  8. 一个判断session是否过期的小技巧

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Session一直是我们做web项目经常使用的,以前没太注意,这次又细致的看了下! 1.sessio ...

  9. java session 永不过期_Java Web Application使Session永不失效(利用cookie隐藏登录)

    在做 Web Application 时,因为 Web Project 有 session 自动失效的问题,所以如何让用户登录一次系统就能长时间运行三个月,就是个问题. 后来,看到 session 失 ...

最新文章

  1. 一道让你拍案叫绝的算法题
  2. 【统计学习方法】感知机对鸢尾花(iris)数据集进行二分类
  3. 「AI 质检员」在富士通工厂上岗,检测效率比人工提升 25%
  4. object-c html,object.html
  5. 星空主题设计理念_敏捷协调,智慧运营:金蝶云·星空的产品设计理念与应用实践...
  6. LeetCode MySQL解题目录
  7. 【学习笔记】网络层——网络层设备、移动IP、IP组播
  8. 不看就亏系列!这里有完整的 Hadoop 集群搭建教程,和最易懂的 Hadoop 概念!| 附代码...
  9. 离婚率逐年上升,数据分析告诉你背后的主因竟然是它!
  10. attributeerror python_python练习类的时候遇到了AttributeError?
  11. Android文件的读写
  12. 最厉害的象棋软件_太牛了!象棋史上最厉害人机高手竟弃车跟软件对杀,就问你敢不敢...
  13. AD637 有效值检测
  14. 微信小程序自定义字体
  15. 链接脚本在编程中的高级运用之一:可变长数组
  16. 基于Sentinel的高可用限流系统HASentinel设计及实现
  17. ME909 ECM拨号上网总结
  18. 三年级江苏凤凰出版社计算机,苏教版小学信息技术三年级下册教案全集
  19. 备份路由器配置文件到服务器,教你如何备份路由器配置文件
  20. (已更新)新版帝国cms内核试玩佣金WAP手机版网站源码,可打包APP

热门文章

  1. POJ-1321-棋盘问题(深搜)
  2. 关于JavaScript(脚本语言)
  3. 介绍 WebLogic 的一些结构和特点
  4. 如何降低数据中心宕机事件的影响
  5. 宇宙射线会导致路由器 bug,思科你认真的吗
  6. 数据中心100G主流应用技术分析与市场预测
  7. SQL中truncate table和delete的区别
  8. UVA10780:Again Prime? No Time(数论)
  9. 怎样使用Secure CRT查看vcenter和esxi主机的日志文件
  10. [职业生涯]你和你的工作