将php.ini的session.auto_start设置为1被视为不良做法?

时间:2011-11-24 12:30:20

标签: session php

我正在使用php.ini的session.start_auto并尝试将其设置为1.我正在构建的网站需要在每个页面上进行会话管理,而服务器只包含一个站点。这被认为是不好的做法(比如打开全局变量 - 我不会这么做!) - php.net对它没有太多说法。

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

  • 如果部署您的应用的用户无法控制php.ini(例如共享托管),则IMO依赖php.ini设置可能会非常棘手。即使可以更改php.ini,也可能难以理解由于php.ini配置问题导致的问题(您可能必须编写一个脚本以检查配置是否正常等)

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

答案 2 :(得分:0)

说实话,我认为打开auto_session不好。就像其他人所说的,这与在所有页面上放置一个session_start()一样。

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

仅在实际需要会话时才运行session_start()更好。您可以只创建一个“会话类”或简单的函数,例如session_get()和session_put(),它们将为您运行session_start()。然后直接使用它们代替$ _SESSION。

答案 3 :(得分:0)

我会说答案是“是的,这是不好的做法。”

[免责声明:我在 1997 年开始构建网页——当你手工编写所有东西时,所以我开发了自己的做事方式。]

在我的世界中,我有一个扩展 SessionHandler 的 MySessionHandler。它拉入一个包含所有所需 ini_set 命令的 INI 文件。我注意到我不是唯一一个这样做的人。如果您自动启动会话(在代码执行之前发生),那么许多框架也会出现问题。

我的 PHP 脚本中的第一行可执行代码是 MySessionHandler.php 的需求,它首先检查 auto-start 和 use_strict_mode 的值,如果它们设置不正确,则可以选择死于错误。