2011-06-24 46 views
2

我的php.ini文件设置为在24小时内过期。但是我的用户在仅仅20分钟左右就注销后就抱怨了。在php会session_start()会搞乱我的用户会话长度?

我在每一页的开头使用session_start。这可能会为我搞砸吗? 或者还有其他什么可能导致这种情况?

刚刚意识到我可能会在共享主机上。它可能有一些垃圾收集会话的组设置。任何人都知道如何看待这个问题,或者让我的问题更具体一些?

谢谢!

+0

您必须在脚本的开头使用session_start(),否则您将无法访问会话数据。 – Kenneth

+0

@Kenneth我在每个脚本的开头使用session_start。 – GeekedOut

+0

这是正确的,这就是你应该做的...... – Kenneth

回答

1
ini_set('session.gc_maxlifetime',28800); #28800 - just an example time - set your own 
ini_set('session.gc_probability',1); 
ini_set('session.gc_divisor',1); 
session_save_path('/path to your sessions folder'); 
ob_start(); 
session_start(); 

您确实需要先创建一个会话文件夹。 这对GoDaddy共享主机肯定有效。 在VPS上你可以使用这个或只是更新你的php.ini文件。

+0

@AR我更新了我的php.ini,并且出于某种原因,当我做phpinfo时,新的更改显示出来,但我不知道为什么会话到期。 :( – GeekedOut

+0

http://php.net/manual/en/session.configuration.php如果不同的脚本具有不同的session.gc_maxlifetime值,但共享存储会话数据的相同位置,则具有最小值的脚本将被清除在这种情况下,请将此指令与session.save_path一起使用。是否可以这样? –

+0

@AR其他脚本可能具有的session.gc_maxlifetime值是什么?顺便说一句,理想情况下,我想保留所有设置配置,而不是代码,但肯定会清理我的会话并将其设置为零大小 – GeekedOut

2

检查phpinfo()看看设置真的是什么。 PHP有多个.ini文件,它的设置可以在多个地方被覆盖,所以你的会话会话可能不是实际生效的。 phpinfo的输出将显示“本地”这个现在是什么效果设置。

除此之外,session_start()不会自己删除会话,但它可能会触发基于几个gc_* .ini设置的会话垃圾回收器运行。不过,这是一个概率性的事情,并且每次开始会话都不会发生。

另一种可能性是您的会话文件将进入某个系统的临时目录,PHP外部的某些内容正在以20分钟的时间间隔清除该目录。因此,请检查session.save_path的设置,看看是否有东西清理那个位置。

+0

@Marc是啊我想因为我在共享主机方案,我可能会分享会话GC配置。你知道如何设定我的独特吗? – GeekedOut

+0

其实我不是共享主机。我在VPS – GeekedOut

+0

我有session.gc_maxlifetime = 200000,但很明显,我的应用程序听不到:) – GeekedOut