PHP随机删除会话

时间:2015-04-02 15:24:33

标签: php session session-cookies session-timeout sessionid

在我们的PHP站点(PHP 5.4.30)上,由于丢失了PHP会话,用户正在注销。

如何知道会话丢失

   session_start();

   if (isset($_SESSION['version']) and file_exists($_SESSION['version'] . '/go.php')) {
        require $_SESSION['version'] . '/go.php';
   }
   else {
        session_destroy();
        header('HTTP/1.0 401 Unauthorized');
        header("Location: 401.php");
   }

一些调查

  • 大多数用户使用Google Chrome。
  • 没有404问题(如favicons)。
  • 未引用任何跨域文件。
  • 没有页面比其他页面更容易丢失会话。再次登录,您在系统中执行的操作将再次运行。
  • 在运行时不会修改任何PHP配置。
  • .htaccess(只是保护和某些重写)没有什么好玩的。
  • 这只发生在实时环境(CentOS 5.1.1)中,而不是在开发机器上。
  • AFAIK没有其他明显的问题,例如磁盘已满或写入错误/ tmp。

的php.ini

php.ini content

的/ tmp

我已经检查了服务器上的/ tmp,并且在注销后会话文件仍然存在

me@example.com [/tmp]# dir -l sess_abcdefb967fc79364a5a773e0157d663
-rw------- 1 si si 565 Apr  3 09:51 sess_abcdefb967fc79364a5a773e0157d663

接头

典型的综合浏览量会产生如下标题:

General
Remote Address:123.123.171.111:443  
Request URL:https://example.com/mx/TypicalPage  
Request Method:GET  
Status Code:200 OK  

Response Headers 
Cache-Control:private  
Connection:Keep-Alive  
Content-Length:6716  
Content-Type:text/html; charset=UTF-8  
Date:Fri, 03 Apr 2015 20:43:06 GMT  
Expires:Thu, 19 Nov 1981 08:52:00 GMT  
Keep-Alive:timeout=5, max=100  
Pragma:no-cache  
Server:Apache/2.2.27 (Unix) mod_ssl/2.2.27 OpenSSL/0.9.8e-fips-rhel5   mod_bwlimited/1.4 PHP/5.4.30  
X-Powered-By:PHP/5.4.30  

Request Headers
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch  
Accept-Language:en-US,en;q=0.8,de;q=0.6,pt-BR;q=0.4,pt;q=0.2  
Connection:keep-alive  
Cookie:PHPSESSID=1234567890abcdef1234567890abcdef  
Host:simplement.com.br  
Referer:https://example.com/mx/PreviousPage  
User-Agent:Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2356.0 Safari/537.36

1 个答案:

答案 0 :(得分:0)

我在新服务器上遇到了同样的问题。这是一个常见的服务器问题,可能是由于资源短缺。

我的代码中的问题在尝试使用以下方式重定向用户时出现:

var editor = CKEDITOR.replace( 'Message', {
allowedContent: 'p'

});
editor.setData( '<p style="color: red">Hello <em>world</em>!</p>' );
alert( editor.getData() );

PHP可能尚未完成向处理程序的会话写入(我是文件),并且header('Location: ...'); 函数重定向了页面。

我已解决了在重定向用户之前调用headersession_regenerate_id函数的问题。

session_write_close