正在设置php.ini';s session.auto_开始1被认为是错误的做法?

正在设置php.ini';s session.auto_开始1被认为是错误的做法?,session,php,Session,Php,我在玩php.ini的session.start\u auto,并尝试将其设置为1。我正在构建的站点需要对每个页面进行会话管理,而服务器只包含一个站点。这被认为是一种不好的做法(比如打开globals——顺便说一句,我不这么认为!)php.net对此没有太多说明 不,为什么会这样?原则上,它与拥有session_start()相同作为每页的第二行。 如果部署您的应用程序的人无法控制php.ini(例如共享主机),那么依赖php.ini设置的IMO可能会很棘手。即使可以更改php.ini,理解由于

我在玩php.ini的session.start\u auto,并尝试将其设置为1。我正在构建的站点需要对每个页面进行会话管理,而服务器只包含一个站点。这被认为是一种不好的做法(比如打开globals——顺便说一句,我不这么认为!)php.net对此没有太多说明

不,为什么会这样?原则上,它与拥有
session_start()相同作为每页的第二行。

  • 如果部署您的应用程序的人无法控制
    php.ini
    (例如共享主机),那么依赖
    php.ini
    设置的IMO可能会很棘手。即使可以更改
    php.ini
    ,理解由于
    php.ini
    配置问题而导致的问题也可能很难理解(您可能需要编写一个脚本来检查配置是否正常,等等)

  • 作为替代方案,您可以创建一个独特的“控制器”脚本(例如
    /index.php
    ),该脚本将根据发送给它的参数调用和输出不同的页面(例如
    yoursite.com/index.php?page=12
    ,或者更好的
    yoursite.com/page/12
    ,带有路由和URL重写)。在该index.php文件中,为所有页面放置一次
    session\u start()


  • 说实话,我认为把AutoSudio打开是不好的。正如其他人所说,这与在所有页面上放置会话_start()是一样的

    想象一下所有进入你网站主页的人。即使在他们尝试登录或其他任何操作之前,也会创建会话。所有垃圾邮件机器人、所有搜索引擎机器人等都将在进入您的页面时创建会话。这通常是一件坏事,因为它会在服务器上创建大量文件(如果会话是基于文件的)或填充ram缓存(如果会话是基于memcache的)


    最好只在实际需要会话时运行会话_start()。您只需创建一个“会话类”或简单的函数,如session\u get()和session\u put(),它将为您运行session\u start()。然后直接使用这些,而不是$\u SESSION。

    我会投票赞成第一点,但投票反对建议使用前端控制器作为解决方案。)(使用自动预编程序可以获得同样的好处,而无需重写整个站点—如果您重写整个站点,只需添加session_start()……就不会更简单了,更不用说FC的所有其他问题了)@symcbean
    auto_prepend_file
    也依赖于
    php.ini
    。IMO使用FC比在每页重复
    session_start();
    更可取:优点看起来比缺点强得多,请参阅或简单使用
    if(ini_get('session.auto_start')==0)session_start()
    为了防止出现通知,您假设正在启动会话()在每一个页面上都是一件好事。如果有人进入你的网站,阅读一些页面,然后离开,为什么需要创建一个会话?你的所有页面都需要一个会话是非常罕见的。@DanieleTesta,是的,但问题明确地说,他的每个页面确实使用了会话。(否则是的,有充分的理由避免默认的PHP会话设置,例如,如果需要自定义会话cookie的属性。)