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();