我需要使用session_start()来使用会话全局变量


don't I need to use session_start() to use session global variables?

php初学者。我在一本书中读到,并继续在某些论坛和教程中看到:session_start()语句是访问所有全局会话变量所必需的。然而,stackoverflow提供的多种解决方案建议使用这样的块:

if(!(_isset($_SESSION['user']))){
   session_start()
}

能够访问会话变量。根据我的理解,会话变量$_SESSION['user']只能通过启动会话在以前的php文件中设置,并且在调用session_start()语句后"仅"对当前页面可见。然而,它产生了一个通知:

Notice: A session had already been started - ignoring session_start().

我错过了什么?

谢谢大家!

你的第一个代码块应该检查会话变量是否设置,而不是用户变量是否存在于会话中:

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

然而,如果你只是确保每个页面只有一个session_start(),那么你可以避免" a session had been started"通知。

session_start()需要读取/设置任何会话变量

一般来说,我认为你的代码应该是这样的:
session_start()
if(!(_isset($_SESSION['user']))){
   // do stuff here
}

但是,错误消息暗示您已经在文件的其他地方启动了会话。

你可能有auto_start打开某处(php.ini, .htaccess等)?http://www.php.net/manual/en/session.configuration.php ini.session.auto-start

下面是一个触发错误的场景:

index . php:

 <?php session_start(); 
    require_once('some-page.php'); ?>

some-page.php:

<?php session_start(); // this would make an error when included to index.nl ?>

some-page.php中不应该有session-start,因为index.php已经启动了session。

还请注意,转到另一个页面甚至关闭选项卡将不会重置您的会话变量!所以如果你设置了S_SESSION['user'] = 'someuser';,你关闭选项卡并再次进入网站,会话仍然在那里,$_SESSION['user']仍然会有一些用户作为值!要手动销毁会话,使用session_destroy();