2012-08-29 129 views
2

我们最近从运行xamp的Windows 2003服务器迁移到运行PHP 5.3.3的apache的Centos服务器。会话过早结束

最初的问题是用户在大约24分钟后被注销,所以我更改了INI变量session.save_path,这解决了问题。但是,一些用户仍然定期从我们的网站注销,似乎是随机的。碰巧多个用户在不同的时间使用不同的浏览器。有时在页面闲置之后,但有时在从一个页面浏览到另一个页面之后。

这是我们的会话相关的INI设置:

session.save_handler = files 
    session.save_path = "/var/sessions" 
    session.use_cookies = 1 
    ;session.cookie_secure = 
    ;session.use_only_cookies = 1 
    session.name = PHPSESSID 
    session.auto_start = 0 
    session.cookie_lifetime = 86400 
    session.cookie_path =/ 
    session.cookie_httponly = 
    session.serialize_handler = php 
    session.gc_probability = 1 
    session.gc_divisor = 1000 
    session.gc_maxlifetime = 86400 
    session.bug_compat_42 = Off 
    session.bug_compat_warn = On 
    session.referer_check = 
    session.entropy_length = 0 
    session.entropy_file = 
    ;session.entropy_length = 16 
    session.cache_limiter = nocache 

起初我以为这可能是在浏览器中的cookie的问题,因为用户的一个有他的cookie设置为永不甚至过期尽管代码将cookie设置为24小时后过期。但是,在删除cookie并让他重新登录之后,它将cookie正确设置为24小时,并且他有同样的问题提前注销。

我创建了一个cron作业脚本,该作业脚本每天早晨凌晨4点将会话从tmp目录中移出后删除所有会话。

我今天发现服务器上的会话没有被删除,但是当用户重新登录时,即使他们仍然在服务器上有一个现有会话,但仍会创建一个具有新会话ID的新会话。

任何援助将不胜感激。

+0

根据我的经验,如果用户使用IE,浏览器将忽略您的会话过期设置并执行自己的操作。你确定不是这样吗? – Matt

+0

一个可能很愚蠢的问题 - 你的服务器的日期,时间和时区是否正确?我假设你已经检查过这个,但是不要求任何费用。 – Grzegorz

+0

请看这里:http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30-minutes – Grzegorz

回答

0

看来,问题是由我的服务器删除会话后,我的Cookie过期导致的。

我有一个脚本安装程序,每天早上在凌晨4点从服务器手动删除会话,但是我的cookie被设置为最后24小时。所以即使在用户登录到网站并在服务器上创建新会话之后,cookie也没有更新其到期时间。

我将cookie的持续时间减少到12小时,以便在下次用户需要登录之前Cookie将始终过期,问题消失。