在PHP中,多次运行session_start()有什么害处吗?

在PHP中,多次运行session_start()有什么害处吗?,php,session,Php,Session,可能会有一些微小的性能影响,但除此之外?从PHP4.3.3开始,在会话已经启动时调用session_start()将导致E_通知警告。对会话_start()的第二次调用将被忽略。您可以检查会话是否已首先启动,方法是: if (session_id() == "") session_start(); 发件人: 从PHP4.3.3开始,在会话之前启动后调用session_start()将导致级别E_通知的错误。此外,第二次会话启动将被忽略 所以不,它不会“造成伤害”,但会抛出一个错误。事实上,

可能会有一些微小的性能影响,但除此之外?

从PHP4.3.3开始,在会话已经启动时调用session_start()将导致E_通知警告。对会话_start()的第二次调用将被忽略。您可以检查会话是否已首先启动,方法是:

if (session_id() == "")
  session_start();
发件人:


从PHP4.3.3开始,在会话之前启动后调用session_start()将导致级别E_通知的错误。此外,第二次会话启动将被忽略


所以不,它不会“造成伤害”,但会抛出一个错误。事实上,这种情况的发生可能表明您做了一些不正确的事情,可能需要重新思考代码的布局。

阅读session\u start的文档,我所能看到的是:

从PHP 4.3.3开始,在先前启动会话后调用
session\u start()
将导致级别
E\u NOTICE
的错误。此外,第二次会话启动将被忽略


因此,您将收到一个
E_通知,并被忽略。

如果会话已打开,则它将返回一个错误通知,新会话将被忽略。所以不会造成伤害,但你会犯一个令人讨厌的错误


但是。。。如果您发现有必要这样做,那么这可能是您的代码组织不好的症状。了解如何避免重复启动会话等冗余任务可能对您有好处。

我通常会将会话开始语句放在我需要的include文件中一次。但是我认为多个调用不应该有问题。

调用session_start();可能会损害应用程序的性能

以下代码将触发E_通知,但不会对性能造成太大的影响

<?php
session_start();
session_start();
?>

但是调用以下命令会损害性能! 但它仍然有用。如果您有一个运行大约需要3分钟的脚本,并且使用XHR(js)调用它。 在这种情况下,使用session\u write\u close很有用。否则,将阻止对服务器的请求,直到释放会话。您可能希望在脚本开始和结束时使用会话

<?php
session_start();
session_write_close();
session_start();
?>

但是,当您调用session_start()时;所有信息都是反序列化的,当您调用session_write_closed()时,它是序列化的。 因此,如果你有很多数据,它可能会非常慢

下面的测试显示了它有多大的影响

1.0130980014801 sesion_启动+关闭空会话

1.0028710365295无会话的正常环路

12.808688879013开始+结束时会话中有大量数据

1.0081849098206再次正常循环(无用类型)


如果它产生了一个错误,很可能是开发人员并不打算让特定的操作发生。所以,是的,不管你在W3Schools上看到了什么,从技术上讲,这是一件“坏事”

因此,与其安全起见,尝试在每个页面上设置会话,为什么不在继续之前先检查会话是否存在

  if ( !isset($_SESSION) ) session_start();

就我个人而言,我会先检查会话cookie是否存在。

最好不要检查。在干净的体系结构中,在正确的位置只有一个
session\u start()
,开发人员应该注意到任何进一步的调用,但不能忽略。使用
@
错误抑制的原因与此相同。
  if ( !isset($_SESSION) ) session_start();