`
moqiang02
  • 浏览: 556377 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

为什么一段时间后网站后台自动退出 php中session过期时间设置

 
阅读更多

修改php配置文件中的session.gc_maxlifetime。如果想了解更多session回收机制,继续阅读。(本文环境php5.2)

概述:每一次php请求,会有1/100的概率(默认值)触发“session回收”。如果“session回收”发生,那就会检查/tmp/sess_*的文件,如果最后的修改时间到现在超过了1440秒(gc_maxlifetime的值),就将其删除,意味着这些session过期失效。

1. session在server端(一般是Apache with PHP module)如何存在的?

默认的,php会将session保存在/tmp目录下(Linux系统),文件名为这个样子:sess_01aab840166fd1dc253e3b4a3f0b8381。每一个文件对应了一个session(会话)。

more /tmp/sess_01aab840166fd1dc253e3b4a3f0b8381
username|s:9:”jiangfeng”;admin|s:1:”0″;
#变量名|类型:长度:值
删除这里的session文件,就表示对应的session失效了。

2. session在client端(一般是浏览器)如何存在的?

session在浏览器端,只需要保存session ID(由server端生成的唯一ID)就可以了。有两种保存方式:在cookie中、在url里面。如果cookie中保存session ID,就可以看到浏览器的cookie中有一个PHPSESID变量。如果是URL传递的,就可以看到形如:
index.php?PHPSESID=01aab840166fd1dc253e3b4a3f0b8381的URL。(在server端通过session.use_cookies来控制使用哪一种方式)

3. 在server端,php如何判断session文件是否过期?

如果”最后的修改时间”到”现在”超过了gc_maxlifetime(默认是1440)秒,这个session文件就被认为是过期了,在下一次session回收的时候,如果这个文件仍然没有被更改过,这个session文件就会被删除(session就过期了)。

简单的说,如果我登录到某网站,如果在1440秒(默认值)内没有操作过,那么对应的session就认为是过期了。

所以,修改php.ini文件中的gc_maxlifetime变量就可以延长session的过期时间了:(例如,我们把过期时间修改为86400秒)

session.gc_maxlifetime = 86400
然后,重启你的web服务(一般是apache)就可以了。

注意:php5里面session过期使用了回收机制。这里设置时间为86400秒,如果session在86400秒内没有被修改过,那么在下一次“回收”时才真的被删除。

3. session“回收”何时发生?(moqiang02:下面的【每一次php请求】是指脚本中包含了session操作的请求,例如在另一个浏览器打开含有session_start()的脚本,则原来的session文件被删除)

默认情况下,每一次php请求,就会有1/100的概率发生回收,所以可能简单的理解为“每100次php请求就有一次回收发生”。这个概率是通过以下参数控制的

#概率是gc_probability/gc_divisor
session.gc_probability = 1
session.gc_divisor = 100
注意1:假设这种情况gc_maxlifetime=120,如果某个session文件最后修改时间是120秒之前,那么在下一次回收(1/100的概率)发生前,这个session仍然是有效的。

注意2:如果你的session使用session.save_path中使用别的地方保存session,session回收机制有可能不会自动处理过期session文件。这时需要定时手动(或者crontab)的删除过期的session:cd /path/to/sessions; find -cmin +24 | xargs rm

4. 一些特殊情况

因为回收机制会检查文件的“最后修改时间”,所以如果某个会话是活跃的,但是session的内容没有改变过,那么对应的session文件也就没有改变过,回收机制会认为这是一个长时间没有活跃的session而将其删除。这是我们不愿看到的,可以通过增加如下的简单代码解决这个问题:

<?php
if(!isset($_SESSION['last_access'])||(time()-$_SESSION['last_access'])>60)
$_SESSION['last_access'] = time();
?>
代码会每隔60秒,尝试修改修改一次session。

总结:如果想修改session过期时间,修改变量gc_maxlifetime就可以了。php5的session采用被动的回收机制(garbage collection)。过期的session文件不会自己消失,而是通过触发“回收”来处理过期的session。

分享到:
评论

相关推荐

    在ASP.NET中,设置Session的过期时间的方法

    方法一:  在后台应用程序中设置:Session.Timeout = 1;  注意:1、此方法可以设置在一个... 您可能感兴趣的文章:php 如何设置一个严格控制过期时间的sessionjava设置session过期时间的实现方法php中实现精确设置se

    详解php设置session(过期、失效、有效期)

    默认情况下,PHP的Session过期时间由`session.gc_maxlifetime`配置决定,单位是秒。你可以通过`ini_set`函数来动态设置它,如下所示: ```php ini_set('session.gc_maxlifetime', 3600); // 设置为3600秒,即1小时...

    设定tomcat中session过期时间.txt

    ### 设定Tomcat中Session过期时间的三种方式 在Web开发中,Session管理是确保用户状态跟踪的重要机制之一。Tomcat作为一款广泛使用的Java应用服务器及Servlet容器,提供了多种方式来设定Session的有效时长。这有助...

    weblogic设置session超时时间

    如果将其设置为 `-1`,则 Session 将永不过期,而忽略在 `weblogic.xml` 文件中设置的 `TimeoutSecs` 属性值。 Method 2: 使用 weblogic.xml 文件 在 WebLogic 中,还可以使用 `weblogic.xml` 文件来设置 Session ...

    退出页面自动清除session技巧

    为了实现用户退出页面时自动清除Session,可以通过监听浏览器的`onbeforeunload`事件,将用户重定向到一个专门用来注销的页面(如`logout.jsp`),在这个页面中执行Session的清除操作。 ```html ``` 其中`logout....

    javaWeb_Session(实现用户一段时间自动登录)

    JavaWeb中的Session技术是Web开发中的重要概念,主要用于在服务器端保持用户状态,尤其是在用户登录后,实现用户在一段时间内的自动登录功能。本篇将详细解释Session的工作原理、配置及其实现用户自动登录的机制。 ...

    session过期时间设置

    总结来说,Session过期时间的设置是一项关键的安全和性能优化措施。通过编程、配置文件或应用服务器配置,我们可以灵活地调整Session的生命周期,并利用监听器在Session失效后执行相应操作,如控制在线用户数、防止...

    php中精确控制session超时时间

    总结来说,要严格控制PHP中的session过期时间,需要综合考虑客户端cookie的生命周期、服务器端的垃圾回收机制以及代码层面的session检查。理解这些机制可以帮助开发者更好地管理和维护用户的会话状态,提供更加安全...

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

    在PHP中,设置session过期时间是一个常见的需求,特别是在需要特定用户会话持久化或安全性更高的场景下。默认情况下,PHP的session过期时间是由`session.gc_maxlifetime`配置项决定的,它定义了session数据在服务器...

    .net 和IIS7.5关于Session超时的设置

    以下是如何设置Session过期时间的方法: ```xml &lt;sessionState mode="InProc" timeout="60"/&gt; ``` 这里的`timeout`属性定义了Session保持活跃状态的分钟数。在这个例子中,Session将在60分钟后自动过期。请...

    java后台请求http并保持Session

    在Java编程中,后台请求HTTP并保持Session是一个常见的任务,特别是在需要访问受保护的Web资源时,例如登录后的网页数据。下面将详细讲解这个过程,包括GET和POST方法的使用,以及Session管理。 首先,我们需要了解...

    session过期问题

    3. **无痕退出**:对于安全性要求较高的应用,Session过期后,不应让用户停留在当前页面,而是立即清除任何敏感信息,执行无痕退出。 **Session过期问题的常见场景及解决方案** 1. **用户长时间未操作**:设置合理...

    php实现主界面登陆 退出session

    一旦用户成功登录,你可以启动一个新的会话,并将用户的ID或其他标识符存储在`$_SESSION`全局变量中,以便后续页面可以识别用户的身份。例如: ```php session_start(); $_SESSION['user_id'] = $user['id']; ``` ...

    判断session过期的方式

    // 设置的Session过期时间为30分钟 long sessionTimeout = 30 * 60 * 1000; // 单位为毫秒 if ((System.currentTimeMillis() - sessionCreationTime) &gt; sessionTimeout) { // Session过期处理,如注销用户、重定向...

    session存用户名密码实现用户登录和退出

    另外,定期更新Session ID,设置合理的Session过期时间也是防止Session劫持的有效手段。 6. **管理大量Session**:在高并发的大型应用中,单纯依赖内存来存储所有Session可能造成资源浪费。这时,可以考虑使用...

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

    如果程序中没有设置session的过期时间,那么session过期时间就会按照IIS设置的过期时间来执行,IIS中session默认过期时间为20分钟,IIS中session时间可以更改 时间设置要放在前面 例如 代码如下: Session.Timeout=30...

    java设置session过期时间的实现方法

    下面我们将详细探讨Java中设置Session过期时间的三种方法。 1. **在部署描述符(web.xml)中设置** 部署描述符是Web应用程序的配置文件,位于`WEB-INF`目录下。在`&lt;web-app&gt;`标签内,可以通过`&lt;session-config&gt;`...

    php中session退出登陆问题

    - **Session超时**:默认情况下,PHP的Session会话将在用户一段时间无活动后自动失效。可以通过设置`session.cookie_lifetime`和`session.gc_maxlifetime`配置来调整这个时间。 - **Session安全**:为了防止...

Global site tag (gtag.js) - Google Analytics