这篇文章给大家分享的是有关php session不起作用怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。
php session不起作用的解决办法:首先在页面的开始处调用“session_save_path()”函数;然后把保存session的目录指向一个专用的目录即可。
php Session失效的原因
最近公司的项目出现了一个Session失效的问题,程序运行之后,session不到几分钟就失效了。后来在网上看了很久,了解了它的机理:Session在lunix里面是存储在公共的路径里面,这就会导致一个问题,如果程序里面有很多的Session应用,就会相互的影响。
后来我尝试修改session.gc_maxlifetime 但是我发现这个参数基本不起作用。在默认情况下,PHP 中的session信息会以文本文件的形式,被保存在系统的临时文件目录中。这个路径由配置参数session.save_path指定。在Linux下,这一路径通常为\tmp,在 Windows下通常为C:\Windows\Temp。当服务器上有多个PHP应用时,它们会把自己的session文件都保存在同一个目录中(因为它们使用同一个session.save_path参数)。同样地,这些PHP应用也会按一定机率启动GC,扫描所有的session文件。
问题在于,GC在工作时,并不会区分不同站点的session。举例言之,站点A的gc_maxlifetime设置为2小时,站点B的 gc_maxlifetime设置为默认的24分钟。当站点B的GC启动时,它会扫描公用的临时文件目录,把所有超过24分钟的session文件全部删除掉,而不管它们来自于站点A或B。这样,站点A的gc_maxlifetime设置就形同虚设了。
所以具体操作就是每个项目拥有自己的session路径,找到问题所在,解决起来就很简单了。在页面的开始处调用session_save_path()函数,它能够修改session.save_path参数,把保存session的目录指向一个专用的目录,例如\tmp\myapp\。这样,gc_maxlifetime参数就工作正常了。
具体代码:
session_start(); ini_set('session.save_path','/tmp/'); //6个钟头 ini_set('session.gc_maxlifetime',21600); //保存一天 $lifeTime = 24 * 3600; setcookie(session_name(), session_id(), time() + $lifeTime, "/");
感谢各位的阅读!关于php session不起作用怎么办就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。