php 严格控制session的过期时间

工作过一段时间,相信大家一定也碰到过一个问题: 
        1.前台用户不知道怎么的就自动掉线了.
        2.后台退出登陆之后所有的前台用户也都掉线了.
        3.我想控制我的用户半个小时自动下线,发现改了配置文件也不好使.
 
    上述的所有问题都是我近期碰到的,后来通过查询知道:php的session机制由几个参数同时控制,具体是哪些我就不具体写了,分别是一个概率,一个最大过期时间,还有一个session的存储路径.在php.ini中我们可以看到,php的session的默认过期时间位24分钟,也就是说如果我们24分钟没有操作页面,这个session就过期了,当然这是理想状态下.24分钟之后php会出发一个session的回收机制,这个机制用来检测默认存储目录下的session文件的更改时间是否为24分钟之前,如果是那么删除session.当然这也是理想状态下.这就是前面提到的一个概率了,session的回收机制是按概率触发的,也就是说,即使你的session为24分钟之前的文件,如果步触发回收机制你的session依然没有过期.这当然也不是我们想要的了.为了解决这个问题就出现了我前面提到的第三个参数,也就是session的存储路径,如果你没有开启php.ini内部的session.save_path那么session是不会有文件产生的,所以为了能更加有效的控制session我们将其打开并且填写一个路径,或者在文件中用session_save_path(".....")函数来定义这个session的存储的路径.还有一点很重要,那就是成如果session存储在我们自己定义的路径内部,seesion的回收机制是不起作用的.所以只能我们自己来控制session的过期时间了.
    下面是一个我自己根据理解写的一个关于session的过期处理类
        

<?php
class Session{
private $savePath;//存储session的路径,必须是绝对路径
private $time;//存储session的过期时间,单位是秒
private $sessionName;//session的名字
private $sessionValue;//session的值

public function __construct($savePath)
{
//将session存入指定的目录
$this->savePath = $savePath;
            //注意:这个一定要写在session_start前面
session_save_path($this->savePath); 

session_start();//开启session
if(!is_dir($this->savePath))
{
                //默认为最大的权限 0777
mkdir($this->savePath) or die('系统错误!');
}
}

//创建session  一共三个参数,
               // $name->session名字
               // $val->session值
               // $time->过期时间,默认为30分钟
public function setSession($name,$val,$time=1800)
{
$this->sessionName  = $name;
$this->sessionValue  = $val;
$this->time       = $time;
if(!isset($_SESSION[$this->sessionName]))
{
if(is_array($this->sessionValue))
{
foreach($this->sessionValue as $key=>$val)
{
$_SESSION[$this->sessionName][$key] = $val;
}
}
else
{
$_SESSION[$this->sessionName]['val']   = $this->sessionValue;
}
$_SESSION[$this->sessionName]["startTime"] = time();
}
//这时候说明session已经存在,那么我们判断他是否过期,如果过期,删除session
else if(isset($_SESSION[$this->sessionName]["startTime"]) && time()-$_SESSION[$this->sessionName]['startTime']>=$this->time)
{
unset($_SESSION[$this->sessionName]);
}
}
}
 ?>

 
    通过这个类我们可以达到几个目的:
                    1.我们可以明确的控制session的过期时间.
                    2.对应上面的第二个问题,我之前做用户退出登陆的时候通常这样写 session_destroy();或者写成unset($_SESSION);殊不知这样就把所有的session都清除了,所以我们会遇到前面一个用户退出之后,我们自己的session也被删除了.
                    3.用户不会无缘无故的掉线了,因为对我们来说每个步骤现在都是透明的了.
 
 

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索session
, 时间
, 机制
, 控制
, 一个
, 过期
, 过期机制
, php自动开启session
, session过期时间
, SESSION机制
控制Session
php session 过期时间、php session永不过期、php session 不过期、php session 过期、php session 过期设置,以便于您获取更多的相关知识。

时间: 2024-12-03 14:32:13

php 严格控制session的过期时间的相关文章

判断Session的过期时间 采用JavaScript实时显示剩余多少秒

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <%session.timeout=1440 '单位(分钟)1440=24小时 参数不能大于24小时 也就是不能大于1440分钟%> <% if session("login")<>"888888" then'判断Session是否有效 Response.Write("Session过期了&quo

判断Session的过期时间 采用JavaScript实时显示剩余多少秒_应用技巧

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <%session.timeout=1440 '单位(分钟)1440=24小时 参数不能大于24小时 也就是不能大于1440分钟%> <% if session("login")<>"888888" then'判断Session是否有效 Response.Write("Session过期了&quo

在ASP.NET中,设置Session的过期时间的方法_实用技巧

方法一:      在后台应用程序中设置:Session.Timeout = 1;     注意:1.此方法可以设置在一个公共的页面中,然后直接调用即可.             2.时间是以分钟为单位的 方法二:      在Web.config中设置:      在<system.web></system.web>中写入<sessionState mode="InProc" timeout="1" />

asp中设置session过期时间方法总结

 如果程序中没有设置session的过期时间,那么session过期时间就会按照IIS设置的过期时间来执行,IIS中session默认过期时间为20分钟,IIS中session时间可以更改   如果程序中设置了session过期时间,那么,即使你将IIS中session时间设置100小时也没有用,因为程序会首先按照程序中设置,只有程序没设置的情况下才会按照IIS设置的 时间设置要放在前面 例如  代码如下   Session.Timeout=30 'SEESION有效时间为30分钟  Sessi

ASP.NET设置Session过期时间

  1.本文所说Session过期时间的四种设置方式均在Widnows2003系统下设置的,具体步骤:开始--〉管理工具--〉Internet信息服务(IIS)管理器--〉网站--〉默认网站- -〉右键"属性"--〉主目录--〉配置--〉选项--〉启用会话状态--〉会话超时(在这儿设置你要的超时时间,单位分钟).确定即可. 2.ASP.NET应用程序中Session过期时间的设置 在ASP.NET这样的Web应用中,Session是用来保存用户状态的常用手段,不过由于服务器内存空间是有

Node.js重新刷新session过期时间的方法_node.js

在Node.js中,我们通常使用express-session这个包来使用和管理session,保存服务端和客户端浏览器之间的会话状态.那如何才能实现当用户刷新当前页面或者点击页面上的按钮时重新刷新session的过期时间呢?类似于ASP.NET中session会话状态,只要在一定的时间内页面一直保持活动状态,session就不会过期.通过下面的代码可以实现这个功能,我们在Node.js的代码中加入下面的中间件: // use this middleware to reset cookie ex

php中session过期时间设置及session回收机制介绍_php技巧

网上很多人给出了解答:修改配置文件中的session.gc_maxlifetime.如果想了解更多session回收机制,继续阅读.(本文环境php5.2) 概述:每一次php请求,会有1/100的概率(默认值)触发"session回收".如果"session回收"发生,那就会检查/tmp/sess_*的文件,如果最后的修改时间到现在超过了1440秒(gc_maxlifetime的值),就将其删除,意味着这些session过期失效. 1. session在端(一般是

php中实现精确设置session过期时间的方法_php技巧

大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设置一下session过期时间. 对此,可以在PHP中,设置php.ini,找到session.gc_maxlifetime = 1440 #(PHP5默认24分钟)这里你可以随便设置一下过期时间.但是有人说设置以后,好象不起作用! 其实不是不起作用,而是因为系统默认: session.gc_probability = 1 session.gc_divisor = 1000 garbage c

asp中设置session过期时间方法总结_应用技巧

如果程序中没有设置session的过期时间,那么session过期时间就会按照IIS设置的过期时间来执行,IIS中session默认过期时间为20分钟,IIS中session时间可以更改 时间设置要放在前面 例如 复制代码 代码如下: Session.Timeout=30 'SEESION有效时间为30分钟 Session("ID")=Rs("id") Session("Name")=Rs("Name") Session(&q