已经启动的PHP会话

在我的PHP代码中,如果一个会话已经开始了,我试着开始一个新的会话,我得到以下的通知:

注意:会话已经开始 – 忽略session_start()

我怎样才能避免这一点?

尝试

<?php if(!isset($_SESSION)) { session_start(); } ?> 

如果你想要一个新的,那么在启动之前先做session_destroy() 。 要在启动之前检查它的设置,请调用session_status()

 $status = session_status(); if($status == PHP_SESSION_NONE){ //There is no active session session_start(); }else if($status == PHP_SESSION_DISABLED){ //Sessions are not available }else if($status == PHP_SESSION_ACTIVE){ //Destroy current and start new one session_destroy(); session_start(); } 

我会避免检查全局的$_SESSION而不是调用session_status()方法,因为PHP明确地实现了这个function:

通过新函数session_status公开会话状态这是为(PHP> = 5.4.0)

只有当你想破坏以前的会话:

 <?php if(!isset($_SESSION)) { session_start(); } else { session_destroy(); session_start(); } ?> 

或者你可以使用

 unset($_SESSION['variable_session _data']) 

销毁一个特定的会话variables。

是的,您可以通过检查isset($_SESSION)来检测会话是否已经在运行。 然而,最好的答案是不要多次调用session_start()

应该在脚本中尽早调用,可能甚至是第一行,然后再不要再调用。

如果你在你的代码中有多个地方,那么你就是要求得到这样的错误。 把它剪下来,所以只能在一个地方,只能调用一次。

你必须已经调用会话开始也许被通过包含再次调用?

 if( ! $_SESSION) { session_start(); } 

尝试这个

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

我build议你使用ob_start(); 在开始任何sesson可变之前,这应该命令您的浏览器缓冲区。

编辑:$ _SESSION后添加了一个额外的)

以上都不适合,不要在所有依赖于$ Sessionvariables的php文件中调用session_start(),否则不会包含它们。 通知是如此烦人,并迅速填写Error_log。 我能find的唯一解决scheme是这样的…

  error_reporting(E_ALL ^ E_NOTICE); session_start(); 

一个不好的解决方法,但它的工作。

我试图修复$ _SESSION的阻止行为时遇到此问题。

http://konrness.com/php5/how-to-prevent-blocking-php-requests/

会话文件保持locking状态,直到脚本完成或会话手动closures。

所以,默认情况下,页面应该以只读模式打开一个会话。 但一旦以只读方式打开,必须以写入模式closures并重新打开。

 const SESSION_DEFAULT_COOKIE_LIFETIME = 86400; /** * Open _SESSION read-only */ function OpenSessionReadOnly() { session_start([ 'cookie_lifetime' => SESSION_DEFAULT_COOKIE_LIFETIME, 'read_and_close' => true, // READ ACCESS FAST ]); // $_SESSION is now defined. Call WriteSessionValues() to write out values } /** * _SESSION is read-only by default. Call this function to save a new value * call this function like `WriteSessionValues(["username"=>$login_user]);` * to set $_SESSION["username"] * * @param array $values_assoc_array */ function WriteSessionValues($values_assoc_array) { // this is required to close the read-only session and // not get a warning on the next line. session_abort(); // now open the session with write access session_start([ 'cookie_lifetime' => SESSION_DEFAULT_COOKIE_LIFETIME ]); foreach ($values_assoc_array as $key => $value) { $_SESSION[ $key ] = $value; } session_write_close(); // Write session data and end session OpenSessionReadOnly(); // now reopen the session in read-only mode. } OpenSessionReadOnly(); // start the session for this page 

那么当你去写一些价值:

 WriteSessionValues(["username"=>$login_user]); 

这会更有效率:

 @session_start(); 

避免屏幕上的error handling程序

最好,

 <?php if ( session_id() != "" ) { session_start(); } 

基本上,在创build另一个会话之前,您需要检查会话是否已经启动; …更多的阅读

另一方面,您select在使用session_destroy()创build另一个会话之前销毁现有会话。

replacesession_start(); 至

 if(!isset($a)) { $a = False; if($a == TRUE) { session_start(); $a=TRUE; } }