http://www.openphp.cn/index.php/article/13/73/ :Session 能否像 Cookie 那样设置生存周期呢?有了 Session 是否就完全抛弃 Cookie 呢?我想说,结合 Cookie 来使用 Session 才是最方便的。  Session 是如何来判断客户端用户的呢?它是通过 Session ID 来判断的,什么是 Session ID,就是那个 Session 文件的文件名,Session ID 是随机生成的,因此能保证唯一性和随机性,确保 Session 的安全。一般如果没有设置 Session 的生存周期,则 Session ID 存储在内存中,关闭浏览器后该 ID 自动注销,重新请求该页面后,重新注册一个 Session ID。  如果客户端没有禁用 Cookie,则 Cookie 在启动 Session 会话的时候扮演的是存储 Session ID 和 Session 生存期的角色。  我们来手动设置 Session 的生存期:<?php     session_start(); 
    //  保存一天 
    $lifeTime = 24 * 3600; 
    setcookie(session_name(), session_id(), time() + $lifeTime, "/"); ?>

解决方案 »

  1.   

    通常可以通过对php.ini中的session.gc_maxlifetime进行设置来实现
    但是,操作系统的gc进程每次只删除session.gc_probability/session.gc_dividend (默认为1/100)
    即1%的临时文件,也就是说只有1%的用户可以在正确的过期时间后过期,这显然不能满足你的需求
    并且session.gc_maxlifetime指定的时间是自用户最后一次访问以后的session.gc_maxlifetime秒后过期
    这也有可能不符合你的意愿所以应该自行处理“过期”,方法如下
    当用户登陆成功时,除在session中保存必要的用户信息以外,还保存一个登陆时间
    在程序中检查该时间与当前时间的差是否在允许范围内即可
      

  2.   

    回帖后才看到 rynewood() 的回复经管
    session_start(); 
    //  保存一天 
    $lifeTime = 24 * 3600; 
    setcookie(session_name(), session_id(), time() + $lifeTime, "/");可以保存session id 很长的时间,但是他忽略了一个重要的问题:一天以后相应的session临时文件还存在吗?默认1440秒以后就可能被删除了。那么只有session id而无相关信息的session有什么用呢?
      

  3.   

    对“过期”的要求,我是这样的:如在一段时间内不对界面进行操作,那么求用户重新登陆。我试着对配置文件php.ini配置了很多次,都不能成功。难道一定要用程序来判断时间差才可以实现吗?
      

  4.   

    不就是增加一个session变量,和修改一句程序吗?没有什么难度嘛
      

  5.   

    如果可以通过配置文件来完成,我当然不想写程序来实现。不过,我接受xuzuning(唠叨)的建议,谢谢了,接分!