我的php.ini文件设置为在24小时内过期。但是我的用户在仅仅20分钟左右就注销后就抱怨了。在php会session_start()会搞乱我的用户会话长度?
我在每一页的开头使用session_start。这可能会为我搞砸吗? 或者还有其他什么可能导致这种情况?
刚刚意识到我可能会在共享主机上。它可能有一些垃圾收集会话的组设置。任何人都知道如何看待这个问题,或者让我的问题更具体一些?
谢谢!
我的php.ini文件设置为在24小时内过期。但是我的用户在仅仅20分钟左右就注销后就抱怨了。在php会session_start()会搞乱我的用户会话长度?
我在每一页的开头使用session_start。这可能会为我搞砸吗? 或者还有其他什么可能导致这种情况?
刚刚意识到我可能会在共享主机上。它可能有一些垃圾收集会话的组设置。任何人都知道如何看待这个问题,或者让我的问题更具体一些?
谢谢!
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文件。
@AR我更新了我的php.ini,并且出于某种原因,当我做phpinfo时,新的更改显示出来,但我不知道为什么会话到期。 :( – GeekedOut
http://php.net/manual/en/session.configuration.php如果不同的脚本具有不同的session.gc_maxlifetime值,但共享存储会话数据的相同位置,则具有最小值的脚本将被清除在这种情况下,请将此指令与session.save_path一起使用。是否可以这样? –
@AR其他脚本可能具有的session.gc_maxlifetime值是什么?顺便说一句,理想情况下,我想保留所有设置配置,而不是代码,但肯定会清理我的会话并将其设置为零大小 – GeekedOut
检查phpinfo()
看看设置真的是什么。 PHP有多个.ini文件,它的设置可以在多个地方被覆盖,所以你的会话会话可能不是实际生效的。 phpinfo的输出将显示“本地”这个现在是什么效果设置。
除此之外,session_start()不会自己删除会话,但它可能会触发基于几个gc_*
.ini设置的会话垃圾回收器运行。不过,这是一个概率性的事情,并且每次开始会话都不会发生。
另一种可能性是您的会话文件将进入某个系统的临时目录,PHP外部的某些内容正在以20分钟的时间间隔清除该目录。因此,请检查session.save_path
的设置,看看是否有东西清理那个位置。
您必须在脚本的开头使用session_start(),否则您将无法访问会话数据。 – Kenneth
@Kenneth我在每个脚本的开头使用session_start。 – GeekedOut
这是正确的,这就是你应该做的...... – Kenneth